2016-10-03 45 views
1

このトピックは広く議論されていますが、この例では私の単純なフォームを提出することはできません。 StackOverflowで見つかった多くの異なるcURL POSTデータの例を試しましたが、うまくいかないようです。PHP CURL投稿フォーム

私の現在のアイデアは、私が理解する限り、データを投稿する実際のアクションではないので、この場合のフォームアクションが問題であるということです。私はヘッダーを傍受するために様々なツールを試しましたが、私が見ているのは、私が現在持っているフォームアクションです。私はここにお問い合わせフォームを提出するのcURLを使用しようとしています

、ここでhttp://www.alpinewebdesign.co.uk/

は(私はすべての隠しフィールドを含めて、私は別のヘッダタイプを設定すると思います失敗ししようとしたした)私の最新の試みです。

//create array of data to be posted 
$post_data['mact'] = 'FormBuilder,m62b34,default,1'; 
$post_data['m62b34returnid'] = '15'; 
$post_data['page'] = '15'; 
$post_data['m62b34fbrp_callcount'] = '1'; 
$post_data['m62b34form_id'] = '4'; 
$post_data['m62b34fbrp_continue'] = '2'; 
$post_data['m62b34fbrp_done'] = '1'; 
$post_data['name'] = 'Name'; 
$post_data['email'] = '[email protected]'; 
$post_data['message'] = 'Message'; 
$post_data['m62b34fbrp_submit'] = 'Send'; 


//traverse array and prepare data for posting (key1=value1) 
foreach ($post_data as $key => $value) { 
    $post_items[] = $key . '=' . $value; 
} 

//create the final string to be posted using implode() 
$post_string = implode ('&', $post_items); 

//create cURL connection 
$curl_connection = 
    curl_init('http://www.alpinewebdesign.co.uk'); 

//set options 
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); 
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 

$headers = array(); 
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'; 
$headers[] = 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryM4YWvE6kIZAIC8vY'; 

curl_setopt($curl_connection, CURLOPT_HTTPHEADER, $headers); 

//set data to be posted 
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); 

//perform our request 
$result = curl_exec($curl_connection); 

//show information regarding the request 
print_r(curl_getinfo($curl_connection)); 
echo curl_errno($curl_connection) . '-' . 
       curl_error($curl_connection); 

//close the connection 
curl_close($curl_connection); 

誰でも問題を見ることができますか?

まずcURLのライブラリがサーバー上で有効になっているかどうかを確認:次に

<?=phpinfo();?> 

CURLOPTを準備しようと

おかげ

+0

エラーログを確認しましたか? –

+1

サイドノート: '$ post_string = http_build_query($ post_items);'はforeachループとimplodeの代わりに必要なものです – andrew

答えて

1

は多分これはあなたを助けることができる

curl_setopt($curl_connection, CURLOPT_POST, true); 
1

を追加します。配列としてのオプション( "form-data"クエリも準備する)

function prepareCurlOptions($url, $data, $headers) 
{ 
    $boundary = uniqid(); 

    $post_fields = "-----" . $boundary . "\r\n"; 

    $separate = count($data); 
    foreach($data as $k=>$v) 
    { 
     $post_fields .= "Content-Disposition: form-data; name=\"$k\"\r\n\r\n$v\r\n-----" . $boundary; 

     // add \r\n separator after each field, except last one 
     if(--$separate > 0) 
     { 
      $post_fields .= "\r\n"; 
     } 
    } 
    $post_fields .= "--"; 

    return array(
     CURLOPT_URL => $url, 
     CURLOPT_POSTFIELDS => $post_fields, 
     CURLOPT_HTTPHEADER => $headers, 
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_ENCODING => "", 
     CURLOPT_SSL_VERIFYPEER => FALSE, 
     CURLOPT_MAXREDIRS => 10, 
     CURLOPT_TIMEOUT => 30, 
     CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 
     CURLOPT_CUSTOMREQUEST => "POST", 
    ); 
} 

そしてcurl_setopt_arrayにより、すべての追加オプションを設定し、例えば:

$url = 'http://www.alpinewebdesign.co.uk'; 

$post_data = array(); 
$post_data['name'] = 'Name'; 
$post_data['email'] = '[email protected]'; 
$post_data['message'] = 'Message'; 
// ... 

$headers = array(); 
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'; 
// ... 

curl_setopt_array($curl_connection , prepareCurlOptions($url, $post_data, $headers)); 

Renemberは、ヘッダの境界が$ post_dataフィールドの場合と同じであることを確認します。例:

$headers[] = "content-type: multipart/form-data; boundary=---".$boundary"