2016-08-11 6 views
4

私は次のURLからテキストを取得しようとしています。 http://stp.stheadline.com/data/indexNewsMarquee.jsonPHP URLからテキストを取得できません(file_get_content、CURLは機能しません)

私はいくつかの方法を試しましたが、いずれも機能しませんでした。私は本当に必死です、今、私を助けて、事前に感謝してください。

P.S.私はすでにini.phpにallow_url_fopenを有効にしました。 P.P.私は

次XAMPPのV3.3.2とPHPのv5.6.23を使用しています、私が試した(そして失敗)しているコードがある

CURL

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_URL, $url); 
$result = curl_exec($ch); 
curl_close($ch); 
echo $result; 

結果:空の文字列

file_get_contents

echo file_get_contents($url, true); 

res ult:ストリームを開けませんでした:HTTP要求に失敗しました!

のReadFile

echo readfile($url) 

結果:出力アドレス自体

+0

次のリンクを参照してください。カール機能は不要です。 http://stackoverflow.com/questions/19758954/get-data-from-json-file-with-php –

答えて

2

あなたのカール要求にヘッダーを渡す必要があります。サーバーはブラウザリクエストとして扱うことができます。

$url="http://stp.stheadline.com/data/indexNewsMarquee.json"; 

$requestHeaders = array(
    "Accept:application/json, text/javascript, */*; q=0.01", 
    "Accept-Language:en-US,en;q=0.8", 
    "Connection:keep-alive", 
    "Host:stp.stheadline.com", 
    "Origin:http://stp.stheadline.com", 
    "Referer:http://stp.stheadline.com/data/indexNewsMarquee.json", 
    "User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36" 
); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); 
curl_close($ch); 
echo $output; 
+0

ありがとうございます。間違っている(ヘッダーを渡すことはどういう意味ですか?)私はこれをかなり新しくしていますので、ちょっと精巧にできれば本当に感謝します。事前にお礼します – Kevin

+0

ええ@ケビン、http://stp.stheadline.comはそうですサーバー上でのアクセス不明のリクエストを防ぐために実装されたセキュリティ。サーバーが要求をブラウザーから受け取るようにするため、ヘッダーを発信元、参照者、urgerエージェントなどのカール要求に含めることによって...ブラウザー要求としてCURL要求を使用するいくつかのトリックがあります:) .. 私あなたは私の答えが好きで、票をあきらめて正しいと印を付けることを願っています...ありがとうございます。 –

+0

あなたの説明のためにhttps://www.sitepoint.com/using-curl-for-remote-requests/ –

2

彼らは要求に存在しても、そうしようとするユーザーエージェントを必要としている:だけのような

$url='http://stp.stheadline.com/data/indexNewsMarquee.json'; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERAGENT, 'banana'); 
curl_setopt($ch, CURLOPT_URL, $url); 
$result = curl_exec($ch); 
curl_close($ch); 
echo $result; 
+0

私は本当にあなたの要求の中でユーザーエージェントの必要性を見つけ出しましたか? – Andrew

+0

curlリクエストを試してみたところ、リクエストが黙って失敗したとき、おそらくいくつかのボットがユーザエージェントを持たないために有効であると思われるため、(このリクエストと同じように)ブラウザのトラフィック。 – RamRaider

+0

うわー。知っておいてよかった。 – Andrew

0

使用をこれは:

$curl_handle=curl_init(); 
curl_setopt($curl_handle,CURLOPT_URL,'Your URL'); 
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); 
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Your application name'); 
$query = curl_exec($curl_handle); 
curl_close($curl_handle); 
print_r($query); 

お客様のURLからこのコードを確認しました。

+0

と "Your Application Name"のセクションを残して試してみました – Dharmendra

+0

ありがとうございます。あなたのコードには、** CURLOPT_USERAGENT **と** CONNECTION_TIMEOUT **(私は持っていません)があります。コードが何をしたか教えていただけますか?ありがとうございます。 – Kevin

+0

@Kevin 1. CONNECTTIMEOUT:接続しようとしている間に待ちます(0の場合無限)。 2. USERAGENT:HTTPリクエストで使用される "User-Agent:"ヘッダーの内容 – Dharmendra

0

これを試してください。

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_URL, 'http://stp.stheadline.com/data/indexNewsMarquee.json'); 
$result = curl_exec($ch); 
curl_close($ch); 

echo($result); // Json data 

/*$obj = json_decode($result); // To get result in array 
print_r($obj);*/ 

それとも

​​

それは私のために働いています:)

0

ケビン、

コードの下にしてみてください。

header('Content-Type: text/html; charset=utf-8'); 

$url='http://stp.stheadline.com/data/indexNewsMarquee.json'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('text/html; charset=utf-8')); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_ENCODING, ""); 
curl_setopt($ch, CURLOPT_URL, $url); 
$result = curl_exec($ch); 
curl_close($ch); 
$final_result = json_decode($result); 

echo "<pre>"; 
print_r($final_result); 

私はあなたのコードでheader('Content-Type: text/html; charset=utf-8');curl_setopt($ch, CURLOPT_ENCODING, "");を追加して、それはまた、同様に、正しい文字が表示されます、うまく動作します。

関連する問題