2016-02-07 56 views
0

我創建了一個名爲question_control.php的表單,它有5個字段question,op1,op2,op3和op4。表單接受參數並將其發送到object.php,後者又將數據以類的對象形式寫入文件。CURL PHP發送空白表格

<form action="object.php" method="GET"> 

我試着將數據發送到question_control.php,發現沒有數據寫入文件。當我嘗試發送數據到object.php時,我發現新對象已經創建,但所有的字段都是空的。我TRED curl_errno(),看看是否有錯誤發生,但它返回0。下面的代碼

<?php 

    $curl_connection = curl_init('http://127.0.0.1/project/object.php'); 

    curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); 
    curl_setopt($curl_connection, CURLOPT_USERAGENT,"Mozilla/25.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); 

    $post_data['question'] = 'My'; 
    $post_data['op1'] = '11'; 
    $post_data['op2'] = '22'; 
    $post_data['op3'] = '33'; 
    $post_data['op4'] = '44'; 

    foreach ($post_data as $key => $value) 
    { 
     $post_items[] = $key . '=' . $value; 
    } 
    $post_string = implode ('&', $post_items); 

    print $post_string."\n"; 

    curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); 

    $result = curl_exec($curl_connection); 

    print $result; 

    print_r(curl_getinfo($curl_connection)); 
    echo curl_errno($curl_connection)."\n"; 

    curl_close($curl_connection); 

?> 
+0

'curl_setopt($ curl_connection,CURLOPT_POST,true);'添加此選項並再次嘗試 –

+0

@MohsenShakibafar如果指定了POSTFIELDS,'cURL'將自動切換到POST。 – arkascha

+0

@MohsenShakibafar試過。它仍然發送一個空白表單。 –

回答

1

正如在討論竟然在評論你實際上必須做出GET請求,而不是一個POST要求的問題。

所以有這種方法一試:

<?php 
$query_parameters = http_build_query([ 
    'question' => 'My', 
    'op1' => '11', 
    'op2' => '22', 
    'op3' => '33', 
    'op4' => '44' 
]); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1/project/object.php?' . $query_parameters); 
// ... more curl_setopt(...) calls ... 

所以您可以通過查詢分離?的方式附加查詢參數的URL和你指定請求的任何POST領域。 GET是cURL的默認設置,因此您無需再照顧。

+0

我試過這種方式,但它仍然發送一個空白表單。所以我嘗試添加按鈕字段,因爲我更早懷疑。有效!!!!我認爲這是因爲服務器端的腳本被編寫爲如果按鈕字段被設置就會將數據寫入文件的方式。不管怎麼說,還是要謝謝你。你一直在幫助很大。 :) –

+0

好吧,我會翻譯你的經驗,除了切換傳輸方法從POST到GET你還需要添加一些缺少的參數接收腳本期望。聽起來像一個經典的例子,爲什麼一個API的文檔是如此重要的事情....很高興你整理出來的東西! – arkascha

0

使用http_build_query函數生成urlencoded的字符串傳遞到請求:

... 
$post_data['question'] = 'My'; 
$post_data['op1'] = '11'; 
$post_data['op2'] = '22'; 
$post_data['op3'] = '33'; 
$post_data['op4'] = '44'; 
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, http_build_query($post_data, '', '&')); 
... 
+0

我試過你的方式,但它仍然無法正常工作。它像以前一樣發送一個空白表格 –

0

我也許已經錯過了$post_data數組的初始設置點爲靜態值,但是當您通過GET提交表單時,爲什麼不直接使用表單中輸入的值?

<?php 
    $ch = curl_init('http://127.0.0.1/project/object.php'); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
    curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/25.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_POST, true); 

    /* automatically generate the required post data using the $_GET array data sent by the form */ 
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_GET)); 

    $result = curl_exec($ch); 
    $info=curl_getinfo($ch); 
    $errors=curl_errno($ch); 
    curl_close($ch); 

    if(!empty($result)) echo $result; 
    if(!empty($info)) print_r($info); 
    if(!empty($errors)) print_r($errors); 
?>