Php cURL POST:400无效的内容长度
我用PHP中的cURL脚本发送POST请求时遇到问题 我正在尝试制作一个代理,本质上是为我个人使用,它将通过服务器获取网页并在本地显示给我 URL如下所示:http://fetch.example.com/http://theurl.com/ 当我在该页面上发布表单时,它将转到表单的操作(前面是获取URL)。我试图让它使用下面的代码处理这个POST请求,但是我发布的任何东西都会带来400个错误请求Php cURL POST:400无效的内容长度,php,post,curl,Php,Post,Curl,我用PHP中的cURL脚本发送POST请求时遇到问题 我正在尝试制作一个代理,本质上是为我个人使用,它将通过服务器获取网页并在本地显示给我 URL如下所示:http://fetch.example.com/http://theurl.com/ 当我在该页面上发布表单时,它将转到表单的操作(前面是获取URL)。我试图让它使用下面的代码处理这个POST请求,但是我发布的任何东西都会带来400个错误请求 $chpg = curl_init(); curl_setopt($chpg, CURLOPT_U
$chpg = curl_init();
curl_setopt($chpg, CURLOPT_URL, $_URL);
curl_setopt($chpg, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($chpg, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($chpg, CURLOPT_COOKIESESSION, true);
curl_setopt($chpg, CURLOPT_COOKIEJAR, "cookies/$_COOKIE_FILE.$_DOMAIN.txt");
curl_setopt($chpg, CURLOPT_COOKIEFILE, "cookies/$_COOKIE_FILE.$_DOMAIN.txt");
if($_POST) {
$fields = array();
foreach($_POST as $col => $val) {
$fields[$col] = urlencode($val);
}
print_r($fields);
curl_setopt($chpg, CURLOPT_POST, count($fields));
curl_setopt($chpg, CURLOPT_POSTDATA, $fields);
}
你有几个问题:
CURLOPT\u POSTDATA
应该是CURLOPT\u POSTFIELDS
$fields
PHP数组作为
CURLOPT_POSTFIELDS
。这实际上需要是
格式化name1=value1&name2=value2&…
要解决这些问题,请按如下方式修改PHP代码:
if($\u POST){
$fields\u str=http\u build\u查询($\u POST);
curl_setopt($chpg,CURLOPT_POST,count($_POST));
curl_setopt($chpg,CURLOPT_POSTFIELDS,$fields_str);
}
如前所述,您可以放弃foreach
循环,改用CURLOPT\u POSTFIELDS
$chpg = curl_init();
curl_setopt($chpg, CURLOPT_URL, $_URL);
curl_setopt($chpg, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($chpg, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($chpg, CURLOPT_COOKIESESSION, true);
curl_setopt($chpg, CURLOPT_COOKIEJAR, "cookies/$_COOKIE_FILE.$_DOMAIN.txt");
curl_setopt($chpg, CURLOPT_COOKIEFILE, "cookies/$_COOKIE_FILE.$_DOMAIN.txt");
if($_POST) {
curl_setopt($chpg, CURLOPT_POST, count($_POST));
curl_setopt($chpg, CURLOPT_POSTFIELDS, http_build_query($_POST));
}
代替foreach循环,你可以只做
$fields\u str=http\u build\u query($\u POST)
@lawrencerone:Ha,太棒了。我没有意识到它的存在!每天学习新东西。:)我是否还需要在查询中使用urlencode?似乎我不能用这个项目登录Hotmail-它说我的电子邮件和密码是正确的,但是我看到了查询,它显示的很好。默认情况下http\u build\u query
将自动对值进行URL编码(根据RFC 1738)。奇数。不知道为什么我不能用它进入Hotmail,它说这是不正确的。我会调查的。谢谢!:)