2016-12-06 2 views
1

Я пытаюсь отправить следующий Curl запрос в PHP:Curl JSON в PHP

$ curl -H 'Content-Type: application/json' -d '{"username":"a", "password":"b","msisdn":"447000000001","webhook":"http://example.com/"}' https://ms.4url.eu/lookup 

Который должен вернуться:

198 bytes text/html; charset=UTF-8 
{ 
    "id": "ea26d0b2-b839-46b9-9138-50cc791bab47", 
    "msisdn": "447825001771", 
    "status": "Success", 
    "networkCode": "23471", 
    "countryName": "UK", 
    "countryCode": "GBR", 
    "network": "O2", 
    "networkType": "GSM", 
    "ported": "No" 
} 

Я попытался реализовать код, чтобы отправить запрос с помощью Curl нравится так:

<?php 

    $data = array('{"username":"a", "password":"b", "msisdn":"447123121234", "webhook":"http://1f89e4a8.ngrok.io"}');                  
    $data_string = json_encode($data);                     

    $ch = curl_init('http://ms.4url.eu/lookup');                  
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                  
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                  
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
     'Content-Type: application/json',                     
     'Content-Length: ' . strlen($data_string))                  
    );  



$result = curl_exec($ch); 

?> 

не используя этот метод ничего, кажется, происходит, я не могу видеть данные в формате JSON отправляется в ms.4url. eu/lookup, и когда я пытаюсь выполнить echo $ result, я не получаю никаких данных.

Любая помощь очень ценится.

запрос Успешный локон показывает:

POST /testDir/getPost.php HTTP/1.1 

host: 1f89e4a8.ngrok.io 

accept: application/json 

content-type: application/json 

content-length: 198 

Connection: close 

X-Forwarded-For: 5.44.233.221 



{"id":"ea26d0b2-b839-46b9-9138-50cc791bab47","msisdn":"447123121234","status":"Success","networkCode":"23471","countryName":"UK","countryCode":"GBR","network":"O2","networkType":"GSM","ported":"No"} 

запрос Сообщение от моего PHP кода показывает:

GET /testDir/curlPost.php HTTP/1.1 

Accept: text/html, application/xhtml+xml, image/jxr, */* 

Accept-Language: en-GB 

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393 

Accept-Encoding: gzip, deflate 

Host: 1f89e4a8.ngrok.io 

X-Forwarded-For: 92.11.143.199 

В целом я хотел бы отправить запрос локон от sendRequest.php и получить Сообщение для webhook to getPost.php, возможно, используя:

$entityBody = file_get_contents('php://input'); 
if ($entityBody != null){ 
    echo $entityBody; 
} 

на Минута Я использую getPost.php для отправки HTTP 200 OK, поэтому ms.4url.eu прекращает отправку запросов 302 Найдено.

ответ

2

Я думаю, это то, как вы строите строку JSon ...

Вы начинаете с определения $ данные в виде массива строк, а затем json_encode. Но он уже в формате json в любом случае (от быстрой проверки глазного яблока).

json_encode (и _decode) предназначены для работы с ассоциативным массивом для ваших данных.

Или просто отправьте строчку данных, которую вы строите, просто убедитесь, что она находится в правильном формате json.

<?php 

// build an associative array 
$data["username"]="a"; 
$data["password"]="b"; 
$data["msisdn"]="447123121234"; 
$data["webhook"]="http://1f89e4a8.ngrok.io"; 

// turn it into json formatted string 
$json_data=json_encode($data); 

print_r($data); 
print($json_data);             

?>

Это дает вам что-то вроде

Array 
(
    [username] => a 
    [password] => b 
    [msisdn] => 447123121234 
    [webhook] => http://1f89e4a8.ngrok.io 
) 


{"username":"a","password":"b","msisdn":"447123121234","webhook":"http:\/\/1f89e4a8.ngrok.io"} 
+0

Я закончил с использованием этого подхода; Проблема с исходной попыткой, которую я опубликовала, - это то, что я не инициировал массив должным образом, поэтому «кодирование» и некорректный объект JSON, который API не мог прочитать. Привет, Иван. –

0

Постарайтесь получить как сырье почтовых данных, как показано ниже

<?php 
$fp = fopen('php://input', 'r'); 
$rawData = stream_get_contents($fp); 

echo "<pre>"; 
print_r($rawData); 
echo "</pre>"; 
0

Если вы отправляете только строку JSON через завиток вы должны использовать, на целевой странице, php://input для извлечения данных, потому что нет значения key =>, а переменные $ _POST и $ _REQUEST не пересекают запрос.

И, конечно, проверьте, какие данные вы отправляете в сообщении. Кажется неправильным json_encode массив с элементом «строка» ..

Если вы хотите, чтобы получить запрос от переменной $ _POST или $ _REQUEST это лучше, если вы поместите ваши данные JSON в ключ, используя функцию http_build_query как следующее:

$data_string = json_encode($data);                     

$ch = curl_init('http://ms.4url.eu/lookup');                  
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                  
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('data' => $data_string)));                 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch);