- 45
- 0
$client = new GuzzleHttp\Client;
$response = $client->request('POST', 'http://www.jgggbbs.cn/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=LRTTI&inajax=1', array(
'form_params' => array(
'username'=>'test',
'password'=>'fwefwegweg'
),
'allow_redirects' => true,
'headers' => [
'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/61.0',
'content-type' => 'application/x-www-form-urlencoded',
'cache-control' => 'no-cache'
]
));
print_r($response->getBody()); //这里输出为空,无法获取到返回结果
用PHP GuzzleHttp来登录某个论坛,这里先不管用户名和密码有没有错,也不管提交的参数有没有错,即使有错,网站也会返回出错的文字提示,但是现在我获取不到任何返回的文字,请问是怎么回事呢?
下面是改用php curl来发送这请求,这个能获取到返回结果(同样先不管是否登录成功,只要有返回结果就行):
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://www.jgggbbs.cn/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=LRTTI&inajax=1",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "username=test&password=test",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/x-www-form-urlencoded"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response; //这里能获取反返回结果
} - 共 0 条
- 全部回答
-
洒了囚心酒 普通会员 1楼
在使用PHP GuzzleHttp库发送HTTP请求时,如果返回结果不是预设的类型(如JSON、XML、HTML等),可能会出现无法获取到返回结果的问题。以下是可能导致这个问题的一些常见原因和解决方法:
- 发送的请求类型不正确:在发送HTTP请求之前,确保你使用的URL是正确的,请求类型(GET、POST、PUT、DELETE等)和请求头(Content-Type、Authorization等)设置正确。在GuzzleHttp中,你可以使用
GuzzleHttp\Request类的httpMethod()方法和httpHeader()方法来设置请求类型和头信息。
```php use GuzzleHttp\Request;
$method = 'GET'; $headers = [ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer YOUR_ACCESS_TOKEN', ];
$curl = new Request($method, 'http://example.com/api/data', $headers); ```
- 请求头问题:在发送请求时,如果没有在请求头中设置相应的Authorization头信息,GuzzleHttp会默认使用HTTP Basic认证。如果你的服务器不允许使用Basic认证,你需要在请求头中设置相应的Authorization头信息,如Bearer token,例如:
php $curl = new Request($method, 'http://example.com/api/data', [ 'Authorization' => 'Bearer YOUR_ACCESS_TOKEN', ]);- 服务器返回的响应格式不正确:GuzzleHttp默认解析JSON响应,如果你的返回结果不是JSON格式,你需要在请求体中指定返回的响应格式。例如,如果你的返回结果是一个JSON数组,你可以使用
json_encode()函数将数组转换为JSON格式:
php $curl = new Request($method, 'http://example.com/api/data', [ 'Content-Type' => 'application/json', 'Body' => json_encode($yourArray), ]);- 远程服务器响应问题:如果服务器响应超时,GuzzleHttp将抛出一个
GuzzleHttp\Exception\RequestException异常。你可以使用response->getStatusCode()方法获取响应的HTTP状态码,然后在请求头中设置相应的状态码信息,如200表示成功,401表示未授权等:
php $curl = new Request($method, 'http://example.com/api/data', [ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer YOUR_ACCESS_TOKEN', 'StatusCode' => 200, ]);- 其他异常或错误:如果请求中包含了非有效的参数或错误,GuzzleHttp将抛出一个
GuzzleHttp\Exception\ClientException异常。你可以捕获这个异常并处理错误,例如:
php try { $curl = new Request($method, 'http://example.com/api/data', [ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer YOUR_ACCESS_TOKEN', ]); } catch (ClientException $e) { // 处理错误 }请注意,以上仅是一般性的解决方案,具体的解决方案可能取决于你的具体需求和服务器的响应格式。在实际使用中,可能需要根据服务器返回的响应内容和具体请求结构,进一步调用GuzzleHttp的错误处理函数,以获取更详细的错误信息和处理方式。
- 发送的请求类型不正确:在发送HTTP请求之前,确保你使用的URL是正确的,请求类型(GET、POST、PUT、DELETE等)和请求头(Content-Type、Authorization等)设置正确。在GuzzleHttp中,你可以使用
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
