1

データを送信する必要がある 2 つの異なるリモート フォームがあります。最初のものは http フォームで、問題なく動作します。送信 > 結果ページにリダイレクト > 応答を変数として返す。

2 つ目は https ページにあり、何を試しても機能しません。だからここに私が取り組んでいるものがあります:

最初のフォームのフォームタグ

<form method="post" name="entry_form" action="a_relative_page.asp?start=1">

2 番目のフォームのフォーム タグ

<form method="post" novalidate enctype="multipart/form-data" action="https://asubdomain.formstack.com/forms/index.php" class="stuff" id="stuff1234567890">

両方のボタンはまったく目立たず、派手な JavaScript を使用せず、基本的に次のように見えます

<input type="submit">

そして、これがPHP cURLリクエストです

    $post_data = http_build_query(
        array(
            'lots_of'   => 'values_here'
        )
    );
    $url = 'https://asubdomain.formstack.com/forms/a_page_with_form';
    $ch = curl_init($url);
    $opts = array(
        CURLOPT_SSL_VERIFYPEER  => FALSE,
        CURLOPT_SSL_VERIFYHOST  => FALSE,
        CURLOPT_UNRESTRICTED_AUTH => TRUE,
        CURLOPT_VERBOSE => TRUE,
        // Above options for debugging because I'm desperate
        CURLOPT_CONNECTTIMEOUT  => 30,
        CURLOPT_USERAGENT       => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
        CURLOPT_RETURNTRANSFER  => TRUE,
        CURLOPT_FOLLOWLOCATION  => TRUE,
        CURLOPT_POST            => TRUE,
        CURLOPT_POSTFIELDS      => $post_data
    ); 
    curl_setopt_array($ch, $opts); 

    //Capture result and close connection
    $result = curl_exec($ch);
    $debug  = curl_getinfo($ch);
    curl_close($ch);

["ssl_verify_result"]=> int(0)デバッグのために無視しているexpected を除いて、curl_getinfo には何も異常はありません 。HTTP コードは 200 です。$result をエコーすると、すべてのフォーム値が入力されていることがわかりますが、フォームは送信されていないため、リダイレクトされていません。次に送信をクリックすると、フォームは問題なく送信され、期待どおりにリダイレクトされます。

繰り返しますが、これは最初の形式の問題ではなく、2 番目の形式の問題です。cURL POST がフォームを送信するのを妨げているフォームスタックの基礎となるコードについて何かがあると推測していますが、それを見つけることができないようです。

編集:問題が見つかりました。formstack フォームには 2 つの非表示要素があります。1 つは _submit と呼ばれる入力フィールドで、1 に設定する必要があります。もう 1 つはフォーム識別子で、整数です。

4

0 に答える 0