提交表单时未收到Curl(php)post变量
我正在设计工作申请表。它应将提供的数据插入下面提供的表格中,并自动提交。 在任何其他页面上都没有问题,我可以登录、保存cookies、阅读它们、转到同一站点上的其他链接。 我遇到的问题发生在表单的页面上,具体来说,curl执行并获取页面,但是post数据没有发送(数据以数组的形式发送,也尝试了urlencoded字符串) 它认为表单的结构可能有问题(下面的代码)。 另外,带有表单的站点不是我的,但我将提供询问的标题和post变量 开始吧。 表格: 输出被回送到.js 来自curl的响应头:提交表单时未收到Curl(php)post变量,php,post,curl,Php,Post,Curl,我正在设计工作申请表。它应将提供的数据插入下面提供的表格中,并自动提交。 在任何其他页面上都没有问题,我可以登录、保存cookies、阅读它们、转到同一站点上的其他链接。 我遇到的问题发生在表单的页面上,具体来说,curl执行并获取页面,但是post数据没有发送(数据以数组的形式发送,也尝试了urlencoded字符串) 它认为表单的结构可能有问题(下面的代码)。 另外,带有表单的站点不是我的,但我将提供询问的标题和post变量 开始吧。 表格: 输出被回送到.js 来自curl的响应头: HT
HTTP/1.1 200 OK Date: Thu, 24 Jan 2013 08:05:17 GMT Content-Type: text/html;charset=UTF-8 Content-Language: en-US Vary: Accept-Encoding Transfer-Encoding: chunked
Firebug说帖子字段是:
typeSVA
accountCode
param.konos
param.tel
param.tfx
param.eml
param.vrkv
param.lpb
param.idkod
param.ugbrz
param.iatk
param.dkk
param.opkv
attachment
标题
萤火虫
Response Headers
Connection Keep-Alive
Content-Language en-US
Content-Length 0
Content-Type text/plain
Date Thu, 24 Jan 2013 12:52:46 GMT
Keep-Alive timeout=15, max=100
Location https://something.something/ui/something/b2b/faults?type=SVA&guid=40898022-1b33-42ab-a9f2-696cc5f70950
请求头
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Connection keep-alive
Cookie JSESSIONID=DD0148C1D1701FA237704C42DE093687.node1
Host something
Referer https://something.something/ui/something/something/newFault?type=SVA
User-Agent Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0
问题:我遇到的问题发生在表单的页面上,具体来说,curl执行并获取页面,但是post数据没有发送,即表单不接受它(数据以数组的形式发送,也以编码字符串的形式发送)有什么想法吗
你还有什么需要问的吗
$url = 'http://foo.com/';
$paramsarray = array(
'name' => ' Test',
'age' => 24,
'preferences' => array(1,2,3,4,5,6)
)
$params = http_build_query($paramsarray);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$params);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
if(curl_exec($ch) === false) {
echo 0;
} else {
echo 1;
}
curl_close ($ch);
尝试此操作您可以使用
http\u build\u query()
函数将数组转换为所需的字符串格式。然后使用curl发布到url,制作一个index.php文件,并将以下代码放在那里:
<?php
$url = 'http://localhost/curltest/ind.php';
$paramsarray = array(
'name' => '',
'age' => 24,
);
$params = $query = http_build_query($paramsarray, '', '&');
$ch = curl_init($url);
curl_setopt_array($ch, array(
CURLOPT_HEADER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $params,
));
$ress = curl_exec($ch);
echo $ress;
if(curl_exec($ch) === false) {
echo 0;
} else {
echo 1;
}
curl_close ($ch);
运行index.php文件,您将获得如下输出:
Array ( [name] => [age] => 24 ) 1
这表明使用curl将空的Post字段提交到
ind.php
页面。我在上面告诉过你,我尝试了以字符串和数组的形式发送,这两种情况都不行。好主意。我到家后会试试的。所以这不应该是问题所在。你知道我还能试什么吗?当我使用表单时,我会发布标题,以便您可以看到正常表单使用时发生的情况。为了更容易阅读print\r()
的输出,请使用first print
。你也可以关闭标签,虽然这不是必需的。我放弃了。如果有人发现自己处于类似的情况,我建议放弃尝试用curl。由于ajax的书面形式,我无法使用curl。最近我有一个类似的项目,但这次我用python/mechanize编写了它,它工作起来很有魅力。因此,python是一条出路。
<?php
$url = 'http://localhost/curltest/ind.php';
$paramsarray = array(
'name' => '',
'age' => 24,
);
$params = $query = http_build_query($paramsarray, '', '&');
$ch = curl_init($url);
curl_setopt_array($ch, array(
CURLOPT_HEADER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $params,
));
$ress = curl_exec($ch);
echo $ress;
if(curl_exec($ch) === false) {
echo 0;
} else {
echo 1;
}
curl_close ($ch);
<?php
print_r($_POST);
?>
Array ( [name] => [age] => 24 ) 1