1

私は 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

ただし、guzzle で同じ呼び出しを試みると、422 Unprocessable Entity エラーが発生します。

$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);

この問題をデバッグする方法を提案できますか?

4

3 に答える 3

3

方法に誤りがありました。また 、渡すデータに誤りがありました$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());
于 2014-10-28T20:28:40.550 に答える
2

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 Screenshotsページで進行状況を確認できます。

Guzzle を使用して POST リクエストを送信する方法のガイドについては、このドキュメント ( https://media.readthedocs.org/pdf/guzzle/latest/guzzle.pdf ) を参照してください。

于 2014-10-28T17:37:12.227 に答える
0

私の場合、オプションの引数で「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"}'
        ]
    );
于 2018-07-31T14:16:37.773 に答える