2016-07-27 31 views
0

私はcurlライブラリのページのデータを取得しようとしています。私は単純なリンクで行うことができますが、フォームを送信してデータを取得しようとすると、できません。送信されたフォームではなく、pageのデフォルト値を返します。コードを説明しましょう。PHPカール投稿データ発行

$url = ... 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST, 1); 
// I'm sending post data 
$params = array(
     'madrak'=>5, 
     'B1' => 'مشاهده اطلاعات' 
); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
// and execute... 

私はデータを取得していますページがaspと書かれていると、そのページのフォーム部分はこれです:

<input type="submit" value="مشاهده اطلاعات" name="B1"> 

<select name="madrak" size="1" class="style1" id="1"> 
    <option value="1">زير ديپلم</option> 
    <option value="5">ديپلم</option> 
    <option value="6">فوق ديپلم</option> 
    <option value="7">ليسانس</option> 
    <option value="8">فوق ليسانس</option> 
    <option value="9">دكترا</option> 
    <option selected="" value="6">فوق ديپلم</option> 
</select> 

フォームが送信されていないようです。フォームを送信せずにロードしているデータを取得できるだけであるためです。何か案が?

+0

$ info = curl_getinfo($ ch); print_r($ info)を試してください。結果のコールバックを取得します。 HTTP_Codeの戻り値が200かどうかをチェックするか...? –

+0

@QuỳnhNguyễnそれは 'http_code'のために私にゼロを返します。しかし、それはデータを返します。 –

+0

http_codeが0で、まだデータが返ってきているとは思えません。 –

答えて

1

まず、投稿データのクエリ文字列を作成する必要はありません。配列を渡すことができます。

HTTPヘッダーも設定してください。コンテンツタイプ、ユーザーエージェントなどと同様に、対象のWebサイトがヘッダーをチェックする可能性があります。

しかし、最も重要な部分は、Content-Type: application/x-www-form-urlencoded HTTPヘッダーを設定することです。

curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded']); 
+0

いいえ、動作しませんでした。私は 'http_build_query'について調べましたが、私はこれを使うべきであることを知りましたが、その機能がなければ動作しません。 –

+0

@vahidnajafiあなたは正しい方法でデータを送信しています。他のHTTPヘッダーを設定しようとしましたか?これをテストする最善の方法は、ブラウザが送信するすべてのヘッダをコピーすることです。それでも正しい結果が得られない場合は、カールを有効にすることを検討する必要があります。多くのWebサイトでは、このような手段を使用してデータクロールを防止しています。 –

+0

'http_build_query'の有無に関わらず動作しません。 –

関連する問題