有人能帮我解决拉勒维尔口香糖的问题吗?
我有一些使用curl的代码,它可以工作。
$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, ['userId' => $appUserId]);
curl_setopt($ch, CURLOPT_URL, $url);
$content = curl_exec($ch);
var_dump($content); // I get a response, response is good.
curl_close($ch);所有我需要的数据我都得到了很好的回应。简单又好。
然而,我工作的公司在整个应用程序中都使用口香糖,所以当我使用口香糖的时候。
$client = new GuzzleHttp\Client();
try {
$res = $client->request('POST', $url, [
'form_params' => [
'userId' => $appUserId
],
'headers' => ['Content-Type' => 'application/json', 'Accept' => 'application/json'],
// I have tried every imaginable header.
]);
$result = json_decode($res->getBody());
echo $res->getBody();
var_dump($result);
} catch (\GuzzleHttp\Exception\RequestException $e) {
var_dump('error');
$guzzleResult = $e->getResponse();
var_dump($guzzleResult);
}我因为某种原因而犯了重大错误。
这是错误。
object(GuzzleHttp\Psr7\Response)#317 (6) {
["reasonPhrase":"GuzzleHttp\Psr7\Response":private]=>
string(12) "Unauthorized"
["statusCode":"GuzzleHttp\Psr7\Response":private]=>
int(401)
["headers":"GuzzleHttp\Psr7\Response":private]=>
array(7) {
["Host"]=>
array(1) {
[0]=>
string(14) "127.0.0.1:8000"
}
["Date"]=>
array(2) {
[0]=>
string(29) "Wed, 19 Aug 2020 13:39:56 GMT"
[1]=>
string(29) "Wed, 19 Aug 2020 13:39:56 GMT"
}
["Connection"]=>
array(1) {
[0]=>
string(5) "close"
}
["X-Powered-By"]=>
array(1) {
[0]=>
string(9) "PHP/7.3.6"
}
["Cache-Control"]=>
array(1) {
[0]=>
string(17) "no-cache, private"
}
["Content-Type"]=>
array(1) {
[0]=>
string(16) "application/json"
}
["Set-Cookie"]=>
array(2) {
[0]=>
string(316) "XSRF-TOKEN=eyJpdiI6ImlPSHczMXRUQ0ZZTUVpRkFPZ052UHc9PSIsInZhbHVlIjoiS0UrYVdkR2ZETWhcL2FLVjRhSVZPM1VxYjVWb3ZoN2dTZlwvWFlNa2hXam1WNVo1NHo3Mk9aZXc5ZFlzYzhlTlNUIiwibWFjIjoiYThiYWVlYjRmOWJmMDgxOWJmZDQzYjg2YWFmZDdjMDFiYzg0ODk5N2FlZTk3ZmI0YjY5MzlmNzYzMGExMThlYSJ9; expires=Wed, 19-Aug-2020 15:39:56 GMT; Max-Age=7200; path=/"
[1]=>
string(331) "laravel_session=eyJpdiI6ImpkK2ZtblU3MFpBN3hoSlJ1Wk5Nb2c9PSIsInZhbHVlIjoiVVYxeGtTV09ZZzVoMUcyXC8yaVI0XC9ZbWdYa0hQdkxQZ0xMamE1YzNaZ0NCTjJYbWJSUGl0MWMwRU9rczFUeHdQIiwibWFjIjoiNjJkMGVkYmI0ZDcwMTg4YmZmNjZmYjliYzFjOTI1ODRlN2I4ZTM1MjYyN2U0M2M0YzlmODk0YWVjYzRhNzAyOCJ9; expires=Wed, 19-Aug-2020 15:39:56 GMT; Max-Age=7200; path=/; httponly"
}
}
["headerNames":"GuzzleHttp\Psr7\Response":private]=>
array(7) {
["host"]=>
string(4) "Host"
["date"]=>
string(4) "Date"
["connection"]=>
string(10) "Connection"
["x-powered-by"]=>
string(12) "X-Powered-By"
["cache-control"]=>
string(13) "Cache-Control"
["content-type"]=>
string(12) "Content-Type"
["set-cookie"]=>
string(10) "Set-Cookie"
}
["protocol":"GuzzleHttp\Psr7\Response":private]=>
string(3) "1.1"
["stream":"GuzzleHttp\Psr7\Response":private]=>
object(GuzzleHttp\Psr7\Stream)#315 (7) {
["stream":"GuzzleHttp\Psr7\Stream":private]=>
resource(484) of type (stream)
["size":"GuzzleHttp\Psr7\Stream":private]=>
int(49)
["seekable":"GuzzleHttp\Psr7\Stream":private]=>
bool(true)
["readable":"GuzzleHttp\Psr7\Stream":private]=>
bool(true)
["writable":"GuzzleHttp\Psr7\Stream":private]=>
bool(true)
["uri":"GuzzleHttp\Psr7\Stream":private]=>
string(10) "php://temp"
["customMetadata":"GuzzleHttp\Psr7\Stream":private]=>
array(0) {
}
}
} 如果我将调试设置为true,则得到以下内容
C:\xampp-7\htdocs\website\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php:
ErrorException: curl_setopt_array():无法将输出类型的流表示为STDIO文件*在第59行的文件ErrorException中
我以前用过口香糖,它应该相当简单。
发布于 2020-08-19 14:12:53
您正在将一些form_params传递给application/json,但是您也将内容类型设置为application/json,并且您的数据不是json格式的。试着
$res = $client->request('POST', $url, [
'form_params' => [
'userId' => $appUserId
],
'headers' => [
'Accept' => 'application/json'
],
]);此外,为了确保响应体被视为字符串,您应该使用getContents()
$responseData = $res->getBody()->getContents();
$result = json_decode($responseData);发布于 2021-05-10 07:30:23
'debug' => fopen('php://stderr', 'w'),这对我来说很管用
$client->request('POST', $url, [
'debug' => fopen('php://stderr', 'w'),
'form_params' => [
'userId' => $appUserId
],
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json'
],
]);https://stackoverflow.com/questions/63488657
复制相似问题