[英]Guzzle 422 Unprocessable Entity error
我正在使用browserstack屏幕截圖API- https ://www.browserstack.com/screenshots/api以下卷曲正在工作:
curl -u "username:password" -H "Content-Type: application/json" -H "Accept: application/json" -d '{"browsers": [{"os": "Windows", "os_version": "7", "browser_version": "8.0", "browser": "ie"}], "url": "http://google.com"}' http://www.browserstack.com/screenshots
但是,當我用相同的口哨嘗試相同的呼叫時,會收到422無法處理的實體錯誤。
$client = new GuzzleHttp\Client();
$request = $client->post('http://www.browserstack.com/screenshots', [
'headers' => ['Content-type' => 'application/json'],
'auth' => ['username', 'password']
]
);
$data = ['browsers' => ['os' => 'Windows', 'os_version' => '7', 'browser_version' => '8.0', 'browser' => 'ie'], 'url' => 'http://google.com'];
$request->setBody($data);
$response = $request->send();
dd($response);
您能建議如何調試此問題嗎?
要將JSON發送到Screenshots API,您需要將其格式化為JSON字符串。
$client = new GuzzleHttp\Client();
$request = $client->post('http://www.browserstack.com/screenshots', [
'headers' => ['Content-type' => 'application/json'],
'auth' => ['username', 'access_key'],
'body' => '{"browsers": [
{"os": "Windows", "os_version": "7", "browser_version": "8.0", "browser": "ie"},
{"os": "android", "os_version": "4.4", "device": "HTC One M8", "browser": "Android Browser"}
],
"url": "http://www.lipsum.com"}'
]
);
然后,您將能夠在BrowserStack屏幕截圖頁面上查看進度。
有關如何使用狂飲發送POST請求的指南,你可以參考這個文檔- https://media.readthedocs.org/pdf/guzzle/latest/guzzle.pdf 。
我的方法有誤。 應該是$client->createRequest
而不是$client->post
另外,我在傳遞數據時有一個錯誤。 瀏覽器應為數組數組
還有一個可以與browserstack和guzzle一起使用的庫: https : //github.com/ksenzee/browserstack-screenshots-php
$client = new GuzzleHttp\Client();
$request = $client->createRequest('POST', 'http://www.browserstack.com/screenshots', [
'headers' => ['Content-type' => 'application/json'],
'auth' => ['user', 'pwd'],
'body' => '{"browsers": [
{"os": "Windows", "os_version": "7", "browser_version": "8.0", "browser": "ie"},
{"os": "android", "os_version": "4.4", "device": "HTC One M8", "browser": "Android Browser"}
],
"url": "http://www.lipsum.com"}'
]
);
$response = $client->send($request);
dd($response->json());
就我而言,在選項的參數中使用'json'( https://es.stackoverflow.com/questions/185183/porqu%C3%A9-guzzle-5-0-lanza-el-error-422-si-estoy-armando -bien-la-consulta#185192 ),例如:
$client = new GuzzleHttp\Client(['base_url' => 'http://www.browserstack.com/']);
$request = $client->post('screenshots', [
'headers' => ['Content-type' => 'application/json'],
'auth' => ['username', 'access_key'],
'json' => '{"browsers": [
{"os": "Windows", "os_version": "7", "browser_version": "8.0", "browser": "ie"},
{"os": "android", "os_version": "4.4", "device": "HTC One M8", "browser": "Android Browser"}
],
"url": "http://www.lipsum.com"}'
]
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.