2013-01-16 101 views
0

嗨我想使用POST方法發送此json對象,但我不知道如何包括下面的標題,我正在檢查很多示例,但沒有人使用標題以下列出。使用JSON PHP發佈http請求

這是我的PHP處理網頁的代碼,這個頁面將處理輸入從一個form.html接收並且將創建JSON對象要被傳送到HTTP服務器(外部平臺)

<?php 
$host ="10.10.237.8"; 
$puerto = 21098; 
$BUFF = 2048; 
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
$conexion = socket_connect($socket, $host, $puerto); 
if($conexion) 
{ 
    $msisdn=$_POST["msisdn"]; 
    $mensaje=$_POST["mensaje"]; 
    $php_array = array( 
     "numero" => $msisdn, 
     "mensaje" => "$mensaje", 
    ); 
    $json_array=json_encode($php_array); 
    echo "Conexion Exitosa, puerto: " . $puerto."\n\n"; 
    echo $json_array; 
    socket_write($socket, $json_array); 
    // Receive the results (if any) from the server 
    $server_response = socket_read($socket, $BUFF); 
    $decoded_response = json_decode($server_response, true); // decode the data received 
    echo $decoded_response['passphrase']; // and spit the results 
} 
else 
{ 
    echo "\nLa conexion TCP no se pudo realizar, puerto: ".$puerto; 
} 
socket_close($socket); 
?> 

這些是標題信息,我應該在哪裏包含它們?怎麼做 ?使用cURL?你有一個很好的例子嗎?

POST /SMBULK/BATCH HTTP/1.0 
Authorization: Basic dGVzdDp0ZXN0 
Host: 10.10.237.8:21098 
Content-Length: 395 
User-Agent: Wget/1.12 (solaris2.10) 
Content-Type: application/x-www-form-urlencoded 
Connection: Keep-Alive 
Accept: */* 

我希望你能幫助我。上面的php代碼不起作用,因爲某些信息(POST,Content-Length,Content-Type,User-Agent ...等)沒有被包含(除了包含的「主機」)。

我設法做到這一點,但它不工作:

<?php 
$str_obj_json='{ 
"method":"SUBMIT","params":{ 
"batchType":"submit", 
"batchId":"alvarons", 
"origAddr":"550", 
"origTon":2, 
"userData":"Movistar les desea Feliz Navidad", 
"submits": 
[ 
    { 
    "messId":"mess127_001", 
    "destAddr":"51975375377"} 
] 
    } 
}'; 
$ch = curl_init('http://10.10.237.8:21098/SMBULK/BATCH'); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $str_obj_json); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/x-www-form-urlencoded', 
'Content-Length: 395', 
'Authorization: Basic dGVzdDp0ZXN0', 
'User-Agent: Wget/1.12 (solaris2.10)', 
'Connection: Keep-Alive', 
'Accept: */*') 
); 
$result = curl_exec($ch); 
?> 

有什麼不對? 「內容類型:應用程序/ JSON」

+0

如果您想發送一個'HTTP/1.0'頭,爲什麼使用套接字?使用PHP cURL lib檢查[this](http://php.net/manual/en/curl.examples.php)的基本示例。 – user1190992

+0

我是新的使用這種事情在PHP中,你有一個很好的例子,如何做到這一點? –

+0

此[post](http://www.lornajane.net/posts/2011/posting-json-data-with-php-curl)解釋瞭如何使用post發送自定義標題和數據。希望這可以幫助。 – user1190992

回答

0

要使用你必須添加cUrl作者發送JSON對象到標題

curl_setopt($curl, CURLOPT_HTTPHEADER, 
       array(
'Content-type: application/json' 
'Content-Length: 395', 
'Authorization: Basic dGVzdDp0ZXN0', 
'User-Agent: Wget/1.12 (solaris2.10)', 
'Connection: Keep-Alive', 
'Accept: */*');