PHP Curl请求不起作用,但在POSTMAN中可以正常工作

编程入门 行业动态 更新时间:2024-10-25 02:29:33
本文介绍了PHP Curl请求不起作用,但在POSTMAN中可以正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试登录MCA门户(POST URL:

任何想法都丢失了吗?

解决方案

该站点进行重定向,因此您需要添加

CURLOPT_FOLLOWLOCATION => 1

到您的期权数组。如果对cURL有疑问,请尝试

$ status = curl_getinfo($ curl);。 echo json_encode($ status,JSON_PRETTY_PRINT);

给予:

{ url: http:\ / \ / www.mca.gov.in\ / mcafoportal\ / loginValidateUser.do?userNamedenc = hGJfsdnk%601t& passwordenc = 675894242fa9c66939d9fcf4d5c39d1830f4ddb9& ; accessCode = -825374456, content_type:文本\ /普通, http_code:302, header_size:1560, request_size :245, filetime:-1, ssl_verify_result:0, redirect_count:0, total_time:1.298891, namelookup_time :0.526375, connect_time:0.999786, pretransfer_time:0.999844, size_upload:0, size_download:0, speed_download :0, speed_upload:0, download_content_length:0, upload_content_length:-1, starttransfer_time:1.298875, redirect_time:0, redirect_url: http:\ / \ / www.mca.gov.in\ / mcafoportal\ / login.do, primary_ip: 115.114.108.120, certinfo:[], primary_port:80, local_ip: 192.168.1.54, local_port:62524 }

如您所见,您得到了 302 重定向状态,但 redirect_count 为 0 。添加选项后,我得到:

{ url: http:\ / \ / www.mca.gov.in\ / mcafoportal\ / login.do, content_type: text\ / html; charset = ISO-8859-1, http_code :200, header_size:3131, request_size:376, filetime:-1, ssl_verify_result:0, redirect_count :1,1,总时间:2.383609, namelookup_time:1.7e-5, connect_time:1.7e-5, pretransfer_time:4.4e -5, size_upload:0, size_download:42380, speed_download:17779, speed_upload:0, download_content_length :42380, upload_content_length:-1, starttransfer_time:0.30734, redirect_time:0.915858, redirect_url:, primary_ip: 14.140.191.120, certinfo:[], primary_port:80, local_ip: 192.168.1.54, local_port :62642 }

EDIT url编码请求参数,并按照重定向进行操作

$ str = urlencode( userNamedenc = hGJfsdnk%601t& passwordenc = 675894242fa9c66939d9fcf4d5c39d1830f4ddb9& accessCode = -825374456); curl_setopt_array( $ curl,array( CURLOPT_URL => www.mca.gov.in/mcafoportal/loginValidateUser.do,//<-删除的参数这里 CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING =>, CURLOPT_FOLLOWLOCATION => 1, CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => POST, CURLOPT_POSTFIELDS => $ str,//<--在此添加 CURLOPT_HTTPHEADER => ; array( cache-control:no-cache ),));

I am trying to login to MCA portal ( POST URL : www.mca.gov.in/mcafoportal/loginValidateUser.do )

I tried logging in with POSTMAN app on Google Chrome which works fine. However, it doesnt work either in PHP/Python. I am not able to login through PHP/Python

Here is the PHP Code :

$url="www.mca.gov.in/mcafoportal/loginValidateUser.do"; $post_fields = array(); $post_fields['userNamedenc']='hGJfsdnk`1t'; $post_fields['passwordenc']='675894242fa9c66939d9fcf4d5c39d1830f4ddb9'; $post_fields['accessCode'] = "" $str = call_post_mca($url, $post_fields); $str = str_replace("&nbsp;","",$str); $dom = new DOMDocument(); $dom->loadHTML($str); $xpath = new DOMXPath($dom); $input_id = '//input[@id="login_accessCode"]/@value'; $input_val = $xpath->query($input_id)->item(0); $input_val1 = $input_val->nodeValue; $url="www.mca.gov.in/mcafoportal/loginValidateUser.do"; $post_fields['userNamedenc']='hGJfsdnk`1t'; $post_fields['passwordenc']='675894242fa9c66939d9fcf4d5c39d1830f4ddb9'; $post_fields['accessCode'] = $input_val1; //New Accesscode function call_post_mca($url, $params) { #$user_agent = getRandomUserAgent(); $user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"; $str = ""; foreach($params as $key=>$value) { $str = $str . "$key=$value" . "&"; } $postData = rtrim($str, "&"); $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_HEADER, false); #curl_setopt($ch, CURLOPT_CAINFO, DOC_ROOT . '/includes/cacert.pem'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch,CURLOPT_USERAGENT, $user_agent); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($ch, CURLOPT_REFERER, $url); $cookie= DOC_ROOT . "/cookie.txt"; curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie); $output=curl_exec($ch); curl_close($ch); return $output; }

Any idea what is missing ?

解决方案

The site does a redirect, so you need to add

CURLOPT_FOLLOWLOCATION => 1

to your options array. When in doubt with cURL, try

$status = curl_getinfo($curl); echo json_encode($status, JSON_PRETTY_PRINT);

giving :

{ "url": "http:\/\/www.mca.gov.in\/mcafoportal\/loginValidateUser.do?userNamedenc=hGJfsdnk%601t&passwordenc=675894242fa9c66939d9fcf4d5c39d1830f4ddb9&accessCode=-825374456", "content_type": "text\/plain", "http_code": 302, "header_size": 1560, "request_size": 245, "filetime": -1, "ssl_verify_result": 0, "redirect_count": 0, "total_time": 1.298891, "namelookup_time": 0.526375, "connect_time": 0.999786, "pretransfer_time": 0.999844, "size_upload": 0, "size_download": 0, "speed_download": 0, "speed_upload": 0, "download_content_length": 0, "upload_content_length": -1, "starttransfer_time": 1.298875, "redirect_time": 0, "redirect_url": "http:\/\/www.mca.gov.in\/mcafoportal\/login.do", "primary_ip": "115.114.108.120", "certinfo": [], "primary_port": 80, "local_ip": "192.168.1.54", "local_port": 62524 }

As you can see, you got a 302 redirect status, but a redirect_count was 0. After adding the option, i get:

{ "url": "http:\/\/www.mca.gov.in\/mcafoportal\/login.do", "content_type": "text\/html;charset=ISO-8859-1", "http_code": 200, "header_size": 3131, "request_size": 376, "filetime": -1, "ssl_verify_result": 0, "redirect_count": 1, "total_time": 2.383609, "namelookup_time": 1.7e-5, "connect_time": 1.7e-5, "pretransfer_time": 4.4e-5, "size_upload": 0, "size_download": 42380, "speed_download": 17779, "speed_upload": 0, "download_content_length": 42380, "upload_content_length": -1, "starttransfer_time": 0.30734, "redirect_time": 0.915858, "redirect_url": "", "primary_ip": "14.140.191.120", "certinfo": [], "primary_port": 80, "local_ip": "192.168.1.54", "local_port": 62642 }

EDIT url encode the request parameters , and follow redirects

$str = urlencode("userNamedenc=hGJfsdnk%601t&passwordenc=675894242fa9c66939d9fcf4d5c39d1830f4ddb9&accessCode=-825374456"); curl_setopt_array( $curl , array ( CURLOPT_URL => "www.mca.gov.in/mcafoportal/loginValidateUser.do" , // <- removed parameters here CURLOPT_RETURNTRANSFER => true , CURLOPT_ENCODING => "" , CURLOPT_FOLLOWLOCATION => 1 , CURLOPT_MAXREDIRS => 10 , CURLOPT_TIMEOUT => 30 , CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1 , CURLOPT_CUSTOMREQUEST => "POST" , CURLOPT_POSTFIELDS => $str, // <- added this here CURLOPT_HTTPHEADER => array ( "cache-control: no-cache" ) , ) );

更多推荐

PHP Curl请求不起作用,但在POSTMAN中可以正常工作

本文发布于:2023-10-29 04:05:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1538675.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:但在   不起作用   工作   PHP   Curl

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!