0

私はこれを php/curl として投稿しましたが、どんな実用的な解決策にもオープンです。

example.com/login.aspログインフォーム内に非表示の値があります:
input type="hidden" name="security" value="123456789abcdef"

curl を使用してこの追加のセキュリティ値を取得し、それを別の curl 呼び出しに含めようとしましたが、最初の curl の後に値が変更されました。PHP の使用を提案している関連記事を読みましたfile_get_contentsが、特定の Web サイトでは機能しませんでした。

現在のphp curlは次のようになります。

function curling ($websitehttps,$postfields,$cookie,$ref,$follow) {

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $websitehttps);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded', 'Connection: Close'));
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    if ($cookie != "") {
        curl_setopt($ch, CURLOPT_COOKIE,$cookie);
    }
    if ($postfields != "") {
        curl_setopt($ch, CURLOPT_POST, 1); 
        curl_setopt($ch, CURLOPT_POSTFIELDS,$postfields);
    }
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $follow); 
    curl_setopt($ch, CURLOPT_AUTOREFERER,TRUE); 
    curl_setopt($ch, CURLOPT_REFERER, $ref);
    curl_setopt($ch, CURLOPT_FAILONERROR, TRUE);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

投稿フィールド ($postfields) で追加のセキュリティ コードを使用する必要があります。これは次のようになります。
ref=https%3A%2F%2Fexample.com%2F&security=123456789abcdef

これを行う方法はありますか?

4

1 に答える 1

0

2 つの個別の curl セッションに余分な行を追加すると、問題が解決しました。

最初の curl セッションに追加された行:

curl_setopt ($ch, CURLOPT_COOKIEJAR, '/tmp/cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);

これらの追加により、tmp フォルダーに Cookie ファイルが作成されました。

2 回目の curl セッションに追加された行:

curl_setopt ($ch, CURLOPT_COOKIEFILE, '/tmp/cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);

ここでは、Cookie ファイル内の情報を使用して、ログイン ページで同じセキュリティ コードを取得しました。

別の Web サイトで説明されている解決策も機能する場合があります。私の場合、サーバーの設定で使用できませんでした。

于 2013-05-18T18:48:59.207 に答える