0

URL " http://hq.sinajs.cn/list=sh600123 "

私はどのブラウザからでも応答を得ることができます.結果は以下のとおりです.

var HQ_STR_SH600123 = "兰花科、13.53,13.63,13.45,13.61,13.43,13.45,13.46,1113110,15047856,3200,13.45,1500,13.44,11590,13.43,336900,1482,13.4882,13.4882,13.4882,13.4882,13.4882,133 6400,13.47,26496,13.48,14453,13.49,3400,13.50,2013-08-30,09:44:08,00";

また、Linux curl コマンドから同じ応答を得ることができます

curl http://hq.sinajs.cn/list=sh600123 var hq_str_sh600123="兰花科创,13.53,13.63,13.44,13.61,13.43,13.43,13.44,1144910,15475169,39090,13.43,37100,130.4 13.41,235500,13.40,5800,13.39,800,13.44,41300,13.45,9800,13.46,6400,13.47,25496,13.48,2013-08-30,09:44:43,00";

しかし、大きな問題は、PHP cURL 関数から正しい応答を得られないことです。

私のトランクコードはこのようなもので、ビジネスロジックを削除しました

 $url = "http://hq.sinajs.cn/";//the url
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // the result could be got by the return value
 curl_setopt($ch, CURLOPT_URL,$url);
 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Expect:' )); // this line is added according to the advice from the internet
 curl_setopt($ch, CURLOPT_URL,$url);

 $post_data = "list=".urldecode($code); // here the code can be "sh600485"
 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

 $result = curl_exec($ch);

$result は false であり、次のような冗長コードを追加します。

    curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $verbose = fopen('php://temp', 'rw+'));
echo "Verbose information:\n<pre>", !rewind($verbose), htmlspecialchars(stream_get_contents($verbose)), "</pre>\n";

出力は

詳細情報: * connect() を hq.sinajs.cn ポート 80 (#0) にしようとしています * 202.108.37.102 を試行しています... * 接続済み * hq.sinajs.cn (202.108.37.102) ポート 80 (#0) に接続しました

POST / HTTP/1.1 ホスト: hq.sinajs.cn Accept: / Content-Length: 13 Content-Type: application/x-www-form-urlencoded

  • アップロードが完全に送信されました: 13 バイト中 13 バイト
  • サーバーからの空の返信
  • ホスト hq.sinajs.cn への接続 #0 はそのまま残されます

詳細情報: * 接続 #0 が停止しているようです! * 接続 #0 を閉じています * hq.sinajs.cn ポート 80 (#0) に connect() しようとしています * 202.108.37.102 を試行しています... * 接続済み * hq.sinajs.cn (202.108.37.102) ポート 80 に接続しました (# 0)

POST / HTTP/1.1 ホスト: hq.sinajs.cn Accept: / Content-Length: 13 Content-Type: application/x-www-form-urlencoded

  • アップロードが完全に送信されました: 13 バイト中 13 バイト
  • サーバーからの空の返信
  • ホスト hq.sinajs.cn への接続 #0 はそのまま残されます

私の質問は、なぜ結果との違いが非常に大きいのですか?

  1. ウェブサイトサーバーの根本原因は何ですか? PHP cURL アクセスを禁止しますか?
  2. 問題を解決するには?

前もって感謝します!

4

1 に答える 1

1

最初の 2 つの例では、HTTPGETリクエストを作成しています。失敗した php/curl の例では、 HTTP を使用していますPOST

私はあなたを疑う

CURLOPT_POSTオプションを変更してみてください:

curl_setopt($ch, CURLOPT_POST, 0);

次の例は私にとってはうまくいきます。URL にクエリ パラメータを追加し、HTTP メソッドを に変更したことに注意してくださいGET

<?php

$url = "http://<INSERT URL HERE>?list=sh600123";
//                              ^ use query params instead of post values...
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);

$result = curl_exec($ch);

var_dump($result);
于 2013-08-30T02:05:06.243 に答える