0

PHP で CURL を使用して分析データを取得するフォーム送信を複製しようとしています。フィドラーから生の POST をコピーし、それを使用して PHP スクリプトに通知しました。

これは私のCURL関数です

function executeCurl($data, $certificate=false) {
    $ch = curl_init();
    //set the url, number of POST vars, POST data
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_HEADER, $data['header']);
    curl_setopt($ch, CURLOPT_URL, $data['url']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data['postdata']);
    curl_setopt($ch, CURLOPT_POST, $data['post']);
    curl_setopt($ch, CURLOPT_COOKIE, $data['cookie']);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $data['httpheader']);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    if($certificate) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "\DigiCertHighAssuranceEVRootCA.crt"); 
    }

    //execute post
    $result = curl_exec($ch);

サーバーから応答を受け取りましたが、投稿データが無視されました。これは私の POST リクエストです。

POST /report.aspx?tid=3477 HTTP/1.1
Host: blah.com
Cookie: somecookies;
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: https://blah.com/report.aspx?tid=3477
Accept-Language: en-GB,en;q=0.8,en-US;q=0.6
Content-Length: 7418
Expect: 100-continue

$data['postdata'] 値は、Fiddler からコピーした URL エンコード データ文字列の正確なコピーです。残りのヘッダーは、CURL によって追加される Expect: 100-continue ヘッダーを除いて同じです。

コンテンツ タイプが適切に設定されていることがわかります。

さらに、HTTPS が使用されており、証明書を使用するかどうかに違いはありません。

そのため、サーバーから応答を受け取りますが、投稿フィールドは無視されます。これがなぜなのかについて誰か提案がありますか?

前もって感謝します。

HTTPHEADER に「Expect:」を追加して編集すると、POST は次のようになりますが、サーバーは投稿されたデータにまだ応答しません。

POST /report.aspx?tid=3477 HTTP/1.1
Cookie: blah
Host: blah.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: https://blah.com
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: https://blah.com/report.aspx?tid=3477 HTTP/1.1
Accept-Language: en-GB,en;q=0.8,en-US;q=0.6
Content-Length: 7418
4

2 に答える 2

1

私の知る限り、ヘッダーを受信した後にサーバーが 100 Continue で応答しない限り、cURL はペイロードを送信しません。curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));この期待を無効にしてみてください。

于 2013-11-14T17:55:37.650 に答える
0

ページに2回アクセスすることでこれを解決しました。__VIEWSTATE、PagePostbackID、および PublicKeyToken 変数を取得するために 1 回。

2 回目にこれらの変数をリクエストで使用すると、POST が機能しました。

于 2013-11-15T11:45:48.430 に答える