【发布时间】:2014-04-15 17:00:53
【问题描述】:
我使用 PHP cURL 模块的 POST 请求有问题。我有一个这样的字符串$new_post(因为它太长了,所以在这里剪掉了):
$new_post = '...AvailabilitySearchInputScheduleSelectView$RadioButtonMarketStructure='.$tipe.'&AvailabilitySearchInputScheduleSelectView$DropDownListMarketDay1='.$tanggal1.'&AvailabilitySearchInputScheduleSelectView$DropDownListMarketMonth1='.$bulan1.'&date_picker='.$bulan1.'-'.$tanggal1.'&AvailabilitySearchInputScheduleSelectView$DropDownListMarketDay2='.$tanggal2.'&AvailabilitySearchInputScheduleSelectView$DropDownListMarketMonth2='.$bulan2.'&date_picker='.$bulan2.'-'.$tanggal2.'&...;
当我使用curl_exec 发布该内容时,POST 字符串会自行更改。子字符串 AvailabilitySearchInputScheduleSelectView 更改为 AvailabilitySearchInputSearchView。我用 Firebug 查了一下。
我不知道为什么会这样。谁能告诉我为什么会这样?这是我的请求代码:
$data = curl_init();
curl_setopt($data, CURLOPT_CONNECTTIMEOUT, 180);
curl_setopt($data, CURLOPT_URL, $url);
curl_setopt($data, CURLOPT_FAILONERROR,1);
curl_setopt($data, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($data, CURLOPT_VERBOSE, 1);
curl_setopt($data, CURLOPT_POST, true);
curl_setopt($data, CURLOPT_RETURNTRANSFER, true);
curl_setopt($data, CURLOPT_POSTFIELDS, $new_post);
curl_setopt($data, CURLOPT_FAILONERROR,0);
curl_setopt($data, CURLINFO_HEADER_OUT, true);
curl_setopt($data, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($data, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($data, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0");
$result = curl_exec($data);
*编辑
如果我在真实的网页中这样做,这正是正确的帖子。我试图以同样的方式发布。很抱歉我可以上传我的萤火虫的截图,因为我没有足够的声誉。
__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwUBMGRkBsrCYiDYbQKCOcoq%2FUTudEf14vk%3D&pageToken=&AvailabilitySearchInputScheduleSelectVieworiginStation1=&AvailabilitySearchInputScheduleSelectView%24TextBoxMarketOrigin1=&AvailabilitySearchInputScheduleSelectViewdestinationStation1=&AvailabilitySearchInputScheduleSelectView%24TextBoxMarketDestination1=&AvailabilitySearchInputScheduleSelectVieworiginStation2=&AvailabilitySearchInputScheduleSelectView%24TextBoxMarketOrigin2=&AvailabilitySearchInputScheduleSelectViewdestinationStation2=&AvailabilitySearchInputScheduleSelectView%24TextBoxMarketDestination2=&AvailabilitySearchInputScheduleSelectView%24RadioButtonMarketStructure=RoundTrip&AvailabilitySearchInputScheduleSelectView%24DropDownListMarketDay1=14&AvailabilitySearchInputScheduleSelectView% 24DropDownListMarketMonth1=2014-04&date_picker=2014-04-14&AvailabilitySearchInputScheduleSelectView%24DropDownListMarketDay2=21&AvailabilitySearchInputScheduleSelectView%24DropDownListMarket Month2=2014-04&date_picker=2014-04-21&AvailabilitySearchInputScheduleSelectView%24DropDownListPassengerType_ADT=3&AvailabilitySearchInputScheduleSelectView%24DropDownListPassengerType_CHD=0&AvailabilitySearchInputScheduleSelectView%24DropDownListPassengerType_INFANT=0&AvailabilitySearchInputScheduleSelectView%24DropDownListSearchBy=columnView&AvailabilitySearchInputScheduleSelectView%24DdlCurrencyDynamic=IDR&ControlGroupScheduleSelectView%24AvailabilityInputScheduleSelectView%24HiddenFieldTabIndex1=4&ControlGroupScheduleSelectView%24AvailabilityInputScheduleSelectView%24market1=0%7EP%7E%7EP% 7ERGFR%7E%7E1%7EX%7CQG%7E+853%7E+%7E%7EDPS%7E04%2F22%2F2014+20%3A05%7ECGK%7E04%2F22%2F2014+20%3A50%7E&ControlGroupScheduleSelectView%24AvailabilityInputScheduleSelectView%24HiddenFieldView%Index2 24AvailabilityInputScheduleSelectView%24market2=0%7EQ%7E%7EQ%7ERGFR%7E%7E1%7EX%7CQG%7E+852%7E+%7E%7ECGK%7E04%2F23%2F2014+16%3A40%7EDPS%7E04%2F23%2F2014+ 19%3A30%7E&ControlGroup ScheduleSelectView%24ButtonSubmit=Lanjutkan
【问题讨论】:
-
Firebug 只显示浏览器完成的请求。它无法跟踪在服务器端完成的请求。因此,您可以添加您在此处看到的屏幕截图。
-
太长了。但是,如果您想查看我的浏览器在网页上发布的内容,仅此而已。
-
我假设当您展开请求并切换到其中的 Post 选项卡时,您会在 Firebug 的 Net panel 中看到以上内容,对吧?那么您实际上在哪里看到不正确的
AvailabilitySearchInputSearchView数据?您是否在处理数据的 PHP 脚本中的某处输出数据? -
是的,当我尝试使用真正的 URL(例如 https//:www.xxx.com/xxx)时,这就是我在 Firebug 的 Net Panel Post 选项卡中看到的实际情况。当我的本地主机将 POST 数据发送到 URL (localhost/test2.php) 时,我看到了
AvailabilitySearchInputSearchView,我也用 firebug 对其进行了检查。当我使用echo检查我的变量时,值仍然相同。 -
我想我知道为什么我在 Firebug 的网络面板中的帖子与变量
$new_post不匹配。可能是因为我在本地主机中从一个页面发布到另一个页面。这意味着我在萤火虫的网络面板中看到的帖子不是我的 php curl 帖子。是否可以检查我使用 php curl 发布的内容是否与我要发布的内容相同?