我有使用PHP的cURL的以下代码;
$product_id_edit="Playful Minds (1062)";
$item_description_edit="TEST";
$rank_edit="0";
$price_type_edit="2";
$price_value_edit="473";
$price_previous_value_edit="473";
$active_edit="1";
$platform_edit="ios";
//set POST variables
$url = 'https://www.domain.com/adm_test/phpgen/offline_items.php?operation=insert';
$useragent = 'Mozilla/5.0 (Windows NT 6.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1';
$fields = array(
'product_id_edit'=>urlencode($product_id_edit),
'item_description_edit'=>urlencode($item_description_edit),
'rank_edit'=>urlencode($rank_edit),
'price_type_edit'=>urlencode($price_type_edit),
'price_value_edit'=>urlencode($price_value_edit),
'price_previous_value_edit'=>urlencode($price_previous_value_edit),
'active_edit'=>urlencode($active_edit),
'platform_edit'=>urlencode($platform_edit)
);
$fields_string="";
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//add useragent
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch,CURLOPT_POST,count($fields));
//execute post
$result = curl_exec($ch);
if(curl_errno($ch)){
print "" . curl_error($ch);
}else{
//print_r($result);
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
//echo "HTTP Response Code: " . curl_error($ch);
echo $httpCode;
//close connection
curl_close($ch);
我打印了$ httpCode;我得到代码200;我认为这是正常的,因为我已在手册页中阅读,但是,当我检查网站时,POSTed值不存在,
这是否与跨域有关,因为我没有在同一个域上发布它?我在127.0.0.1/site/scrpt.php上这样做但是如何获得响应代码200如果它不成功?
我还尝试通过移除请求URL上的一部分来获取404,它确实返回了404(这意味着cURL在我的假设中正常工作)
使用带有“?operation = insert”的网址https://www.domain.com/adm_test/phpgen/offline_items.php?operation=insert是否与它有关?
让我们假设(不是暗示),我来自另一个网站,我希望将帖子值转换为另一个网站的形式,这是一个机器人。我的目标并不意味着任何邪恶的意图,如果这是不可行的话,我必须编码千行信息。
同样,我不需要来自服务器的响应(但如果有可用,那就很好)
答案 0 :(得分:0)
应该使用CURLOPT_POSTFIELDS传递操作。与其他参数一起。
在浏览器的情况下发生跨域问题。而你的代码似乎是一个php服务器端代码,所以这应该不是问题。
答案 1 :(得分:0)
不确定这是解决方案还是问题不同,但是这一行:
rtrim($fields_string,'&');
应该是这样的:
$fields_string = rtrim($fields_string,'&');
答案 2 :(得分:0)
curl_setopt($ch,CURLOPT_POST,TRUE);
CURLOPT_POST
- 布尔值,它不是值的计数,而是使用post flag。
代码200表示连接已正确设置并收到服务器的响应,但这并不意味着已执行所请求的操作。
请求后打印$result
以查看来自Web服务器的响应。