Я пытаюсь выполнить внешний запрос с Kohana 3.1 с этим кодом в моем контроллере.
$request = Request::factory($url);
$request->method(Request::POST);
$request->body($xml);
$request->headers('Content-Type', 'application/xml');
$response = $request->execute();
Я получаю эту ошибку:
HTTP_Exception_500 [ 500 ]: Kohana_HTTP_Header_Value::__construct unknown header value type: integer. array or string allowed.
После некоторых исследований кода я обнаружил, что это проблема с функцией _native_execute
класса Kohana_Request_Client_External
.
Эта функция устанавливает 'content-length' следующим образом:
$body = $request->body();
$request->headers('content-length', strlen($body));
Но $request->header(...)
ожидает строку или массив для второго параметра, а strlen
возвращает целое число.
Это ошибка? Я исправил это так $request->headers('content-length', (string)strlen($body));
Тогда я получил еще одну ошибку:
ErrorException [ Warning ]: fopen(http://xxx.xxx.xxx.xxx/yyyyy) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: HTTP wrapper does not support writeable connections
Эта ошибка возникает из этой строки кода $mode = ($request->method() === HTTP_Request::GET) ? 'r' : 'r+';
снова в _native_execute
.
Я заставил значение $mode
равным r
, и теперь оно работает. Эти две ошибки - ошибки, или я делаю что-то не так?