2015-06-21 2 views
0

Как настроить настраиваемую границу для многостраничного запроса POST? Конфигурация следующих параметров запроса не работает.PHP Guzzle. Как установить настраиваемую границу для многостраничного запроса POST?

'headers' => ['Content-Type' => 'multipart/form-data; boundary=CUSTOM_BOUNDARY'] 
+0

Есть ли у вас конкретная причина, почему вы должны это сделать? – mario

+0

Да, это так. API, который я должен использовать, требует этого. – tooleks

+0

Звучит маловероятно. Просьба привести официальную документацию по этому API. – mario

ответ

2

Для использования полей multipart form в поле запроса используется только psr7. Самый правильный способ справиться с пользовательской границей - использовать GuzzleHttp \ Psr7 \ MultipartStream.

$boundary = 'my_custom_boundary'; 
$multipart_form = [ 
    [ 
     'name' => 'upload_id', 
     'contents' => $upload_id, 
    ], 
    [ 
     'name' => '_uuid', 
     'contents' => $uuid, 
    ], 
    ... 
]; 

$params = [ 
    'headers' => [ 
     'Connection' => 'close', 
     'Content-Type' => 'multipart/form-data; boundary='.$boundary, 
    ], 
    'body' => new GuzzleHttp\Psr7\MultipartStream($multipart_form, $boundary), // here is all the magic 
]; 

$res = $this->client->request($method, $url, $params); 
1

У меня такая же ошибка, вот как я ее решаю.

//encode field 
$field_string = json_encode($field_data); 
//read file 
$file_string = Flysystem::read($config['doc_path']); 
// hack, request body, inject field and file into requet body, set boundary 
$request_body = 
    "\r\n" 
    ."\r\n" 
    ."--customboundary\r\n" 
    ."Content-Type: application/json\r\n" 
    ."Content-Disposition: form-data\r\n" 
    ."\r\n" 
    ."$field_string\r\n" 
    ."--customboundary\r\n" 
    ."Content-Type:application/pdf\r\n" 
    ."Content-Disposition: file; filename=".$config['deal_name'].";documentid=".$config['deal_id']." \r\n" 
    ."\r\n" 
    ."$file_string\r\n" 
    ."--customboundary--\r\n" 
    ."\r\n"; 

//create request, boundary is required for docusign api 
$result = $this->client->createRequest('POST',"$this->baseUrl/templates", [ 
'headers' => [ 
    'Content-Type' => 'multipart/form-data;boundary=customboundary', 
    'Content-Length' => strlen($request_body), 
    'X-DocuSign-Authentication' => json_encode([ 
     'Username' => Config::get('docusign.email'), 
     'Password' => Config::get('docusign.password'), 
     'IntegratorKey' => Config::get('docusign.integratorKey') 
    ]), 
    ], 
    'body' => $request_body 
]); 
Смежные вопросы