2017-05-17 23 views
1

私はcURLチュートリアルをたくさん読んでいます(私はPHPを使用しています)、常に同じ基本コードがあります。特定のエラーはありません。結果はありません。WURLMedia APIからのcURL HTTPリクエストは機能しません

私はWikipediaからHTTPリクエストを作成し、結果をJSON形式で取得したいと考えています。

$handle = curl_init(); 

$url = "http://fr.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=info&format=json"; 

curl_setopt_array($handle, 
    array(
     CURLOPT_URL   => $url, 
     CURLOPT_RETURNTRANSFER => true 
) 
); 

$output = curl_exec($handle); 

if (!$output) { 
    exit('cURL Error: '.curl_error($handle)); 
} 

$result= json_decode($output,true); 
print_r($result); 

curl_close($handle); 

は私が間違ってやって知りたい:

は、ここでは、コードです。

答えて

2

あなたのコードは正しいですが、PHP curlを使用しているときにWikipediaがデータを返信しないようです(ヘッダーやその他のパラメータを設定する必要があるかもしれません)。あなたが必要とするすべてはしかし、いくつかのデータを取得する場合

、あなたは単に罰金働くfile_get_contentsを使用することができます。

$output = file_get_contents("http://fr.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=info&format=json"); 
echo $output; 

編集:

は情報だけのために、私は問題が何であるかを発見しました。そのURLにcurl -vを実行する場合は、次のように起動します:

* Trying 91.198.174.192... 
* Connected to fr.wikipedia.org (91.198.174.192) port 80 (#0) 
> GET /w/api.php?action=query&titles=Albert%20Einstein&prop=info&format=json HTTP/1.1 
> Host: fr.wikipedia.org 
> User-Agent: curl/7.47.0 
> Accept: */* 
> 
< HTTP/1.1 301 Moved Permanently 
< Date: Wed, 17 May 2017 13:54:31 GMT 
< Server: Varnish 
< X-Varnish: 852298595 
< X-Cache: cp3031 int 
< X-Cache-Status: int 
< Set-Cookie: WMF-Last-Access=17-May-2017;Path=/;HttpOnly;secure;Expires=Sun, 18 Jun 2017 12:00:00 GMT 
< Set-Cookie: WMF-Last-Access-Global=17-May-2017;Path=/;Domain=.wikipedia.org;HttpOnly;secure;Expires=Sun, 18 Jun 2017 12:00:00 GMT 
< X-Client-IP: 86.214.172.57 
< Location: https://fr.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=info&format=json 
< Content-Length: 0 
< Connection: keep-alive 
< 
* Connection #0 to host fr.wikipedia.org left intact 

だから何が起こっているhttps://fr.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=info&format=jsonを要求することにより、それが直接操作する必要がありますので、実際の内容は、HTTPSのURL、httpではなく上にあるということです。

file_get_contentsで動作する理由は、この場合リダイレクトが自動的に行われるためです。

+0

httpsを使用すると、「SSL証明書の問題:ローカル発行者証明書を取得できません」というエラーが表示されるので、今はfile_get_contentsを使用します。ありがとうございました:) –