2015-07-06 3 views
0

Я пытаюсь отправить данные POST:PHP локон размещать не отсылают данные

$url ="https://server:510/1/auth/"; 

$data = array(
     "USERNAME" => "user", 
     "PASSWORD" => "password" 
); 

$str_data = json_encode($data); 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, 
array('Content-Type:application/json', 
    'Content-Length: ' . strlen($str_data)) 
); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $str_data); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch,CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1); 
curl_setopt($ch,CURLOPT_POSTREDIR,3); 
$response = curl_exec($ch); 
print_r($response); 

и ответ сервера (результат многословен): «вы не послали каких-либо полномочий»

> POST /1/auth/ HTTP/1.1 
Host: server:port 
Accept: */* 
Content-Length: 39 
Content-Type: application/x-www-form-urlencoded 

< HTTP/1.1 200 OK 
< Date: Mon, 06 Jul 2015 18:53:52 GMT 
< Server: Apache/2.4.10 (Win32) OpenSSL/1.0.1i mod_wsgi/3.5 Python/2.7.8 
< Content-Length: 73 
< Content-Type: application/json 
< 

похоже я не отправляю сообщение данные. что мне не хватает?

я заметил, что в хром отладчик под сети, запрос отправляется как GET ....

ниже документация от сервера поставщика:

Например, предположим, что ваш сервер размещен на 10.211.55.3. Чтобы запросить маркер сеанса введите свое имя пользователя и пароль в качестве POSTING переменных в следующем URL (обратите внимание на использование в/1 /, что номер версии API):

https://10.211.55.3/1/auth 
USERNAME = '[email protected]' 
PASSWORD = 'Tester01' 

Вот это :(

+0

Вы не можете видеть в браузере (будь то Chrome или любой другой), что происходит в коде, который выполняется на сервере. – axiac

+0

уверен, но я могу видеть, что метод был «GET» и не "POST". True? – bart2puck

+0

Вы можете увидеть в браузере обозреватель обо всех браузерах h сервер. Предположим, вы запустили на сервере код PHP, который вы опубликовали. Код использует 'curl' для подключения к другому серверу и отправки HTTP-запроса на него. Браузер никоим образом не участвует в этом втором соединении и понятия не имеет об этом. Он не видит, как ваш код подключается к другому серверу. Все, что он может видеть, это вывод вашего скрипта. И этот вывод отображает (из-за 'CURLOPT_VERBOSE'), что запрос на второй сервер был выполнен с использованием' POST'. Проблема, вероятно, в типе контента, а не в методе. – axiac

ответ

0
$url ="https://server:510/1/auth/"; 
$data = array(
     "username" => "username", 
     "password" => "password" 
); 

$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($data)); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-HTTP-Method-Override:'POST','Content-Type:application/x-www-form-urlencoded','Content-Length: ' .  strlen(http_build_query($data)))); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); 
$response = curl_exec($ch); 

это работало.

+0

Это не сработало. Строка с заголовком curl имеет синтаксическую ошибку –

Смежные вопросы