2017-01-17 5 views
3

У меня есть следующий код для сохранения контента с использованием API из другой системы. Я добавил учетные данные, но он показывает неправильную ошибку учетных данных. Он отлично работает в почтальоне.Ошибка авторизации GUZLE PUT

$client = new GuzzleHttpClient(); 
try { 
    $request = new \GuzzleHttp\Psr7\Request('PUT', config('cms.api.backend') .'/products/'. $nid, 
    [ 
     'auth' => [config('cms.api.user'), config('cms.api.password')], 
     'form_params' => [ 
     'copywrite' => Input::get('copywrite'), 
     'status' => $status 
     ], 
    ]); 
    $promise = $client->sendAsync($request)->then(function ($response) {}); 
    $promise->wait(); 
} 
catch (RequestException $e) { 
    $this->logHttpError($e->getResponse()->getStatusCode(), $e->getResponse()->getBody(true)); 
} 

Что может быть неправильным в приведенном выше коде?

Ниже приведен код экспорта от почтальона.

$request = new HttpRequest(); 
$request->setUrl('http://mybackend/api/products/74371'); 
$request->setMethod(HTTP_METH_PUT); 

$request->setHeaders(array(
    'postman-token' => 'e0ddcaea-4787-b2c5-0c52-9aaee860ceac', 
    'cache-control' => 'no-cache', 
    'authorization' => 'Basic authenticationcode', 
    'content-type' => 'application/x-www-form-urlencoded' 
)); 

$request->setContentType('application/x-www-form-urlencoded'); 
$request->setPostFields(array(
    'copywrite' => 'date to be saved' 
)); 

try { 
    $response = $request->send(); 

    echo $response->getBody(); 
} catch (HttpException $ex) { 
    echo $ex; 
} 
+0

Не могли бы вы показать пример запроса, Вам 'успешно отправлен с почтальоном (нет необходимости в точных данных)? – shudder

+0

@shudder - Я добавил в вопрос, пожалуйста, проверьте – Unnikrishnan

ответ

1

Третий аргумент в \GuzzleHttp\Psr7\Request для заголовков массива только, так что вы не будете посылать тело запроса (четвёртая ARG) таким образом. Самый простой способ - передать этот массив в качестве второго аргумента в метод sendAsync(). Он распознает их и form_params вариант будет разобрано как Content-Type: application/x-www-form-urlencoded заголовок и создать правильный поток для вашего запроса (он использует http_build_query() функцию, если вы хотите сделать это непосредственно в запрос конструктора):

$request = new \GuzzleHttp\Psr7\Request('PUT', config('cms.api.backend') .'/products/'. $nid); 
$options = [ 
    'auth' => [config('cms.api.user'), config('cms.api.password')], 
    'form_params' => [ 
     'copywrite' => Input::get('copywrite'), 
     'status' => $status 
    ], 
]; 


$promise = $client->sendAsync($request, $options)->then(function ($response) {}); 
$promise->wait(); 
Смежные вопросы