0

我正在尝试使用 PHP curl 登录 Tesco Mobile,我有以下代码:

$postData='user=XXX&password=XXXXX';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://paymonthly.tescomobile.com/orderentry/LoginSubmit.do');
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_REFERER, 'https://paymonthly.tescomobile.com/orderentry/LoginSubmit.do');
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);     
$result = curl_exec ($ch); 
curl_close($ch);

但是一直没有成功,请任何人都可以帮助我如何实现这一目标。请在下面找到 Live HTTP 的输出:

提前致谢。

https://paymonthly.tescomobile.com/orderentry/LoginSubmit.do

POST /orderentry/LoginSubmit.do HTTP/1.1 主机:paymonthly.tescomobile.com 用户代理:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:18.0) Gecko/20100101 Firefox/18.0 Accept: text/html,application /xhtml+xml,application/xml;q=0.9, / ;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: https://paymonthly.tescomobile.com/ orderentry/LoginSubmit.do;jsessionid=60af415cd448d5728a9fa98cdf99 Cookie:JSESSIONID=60af415cd448d5728a9fa98cdf99;reevoomark_marker=349049566; reevoo_utma =1.324660794.1360800582.1360800582.1360800582.1;reevoo _utmb=1.5.6.1360800582;reevoo_utmc =1;雷沃_utmz=1.1360800582.1.1.utmgclid=CK6Vp5nBtLUCFeXKtAodVGIAVA|utmccn=(not%20set)|utmcmd=(not%20set)|utmctr=tescomobile; reevoomark_bh_session=0af0a16fc00f5fbc8b0d28c571721a72;CUSTOMER_UUID=04fdc3e6-59e1-4038-81b7-ec7c5d63c9d4;__utma=152930744.490151867.1360800710.1360800710.1360800710.1;__utmb=152930744; __utmc=152930744; __utmz=152930744.1360800710.1.1.utmccn=(referral)|utmcsr=phone-shop.tesco.com|utmcct=/tesco-mobile/my-tesco-mobile/|utmcmd=referral 连接:keep-alive 内容类型:application/ x-www-form-urlencoded 内容长度:32 user=dinoc83&password=c079378643 HTTP/1.1 200 OK X-Powered-By:JSP/2.1 服务器:Sun GlassFish Enterprise Server v2.1.1 内容类型:text/html;charset= UTF-8 传输编码:分块日期:

格林威治标准时间 2013 年 2 月 14 日星期四 00:15:27

4

4 回答 4

2

尝试改变: $postData='user=XXX&password=XXXXX';

经过$postData=array('user=XXX&password=XXXXX');

有一些代码示例: http: //php.net/manual/en/function.curl-setopt.php

问候,

于 2013-02-14T11:47:13.383 回答
0

以这种方式尝试这样做,它对我们在另一台服务器上发布数据有用

   $postData='user=XXX&password=XXXXX'
   $url ="https://paymonthly.tescomobile.com/orderentry/LoginSubmit.do";
   $ch = curl_init() or die(curl_error()); 
    curl_setopt($ch, CURLOPT_POST,1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,$postData); 
    curl_setopt($ch, CURLOPT_URL,$url);// here the request is sent to payment gateway 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $result=curl_exec($ch) or die(curl_error());

    curl_close($ch);
于 2013-02-14T11:43:59.763 回答
0

刚刚检查表格

表单属性动作有参数 jsessionid在你的代码中你不使用它。我认为您应该首先使用表单加载页面,然后解析响应代码并获取正确的发布 URL。而这需要初始化cookies。

于 2013-02-14T11:51:14.853 回答
0

您也可以$postData这样设置值:

$postData = array( 'user'=>'XXX', 'password'=>'XXXX' );

请注意:

将数组传递给 CURLOPT_POSTFIELDS 会将数据编码为 multipart/form-data,而传递 URL 编码的字符串会将数据编码为 application/x-www-form-urlencoded。

于 2013-02-14T12:19:30.587 回答