[英]How to consume my webservice with PHP
我有一個問題..我的應用程序為我提供了以下信息:
HTTP + JSON
以下是示例HTTP請求和響應。 顯示的占位符需要替換為實際值。
POST / json / reply / Zona
HTTP / 1.1
主持人:equatepro.azurewebsites.net
內容類型:application / json
內容長度:長度{ “zonaId”:0, “農布雷”: “字符串”, “creadoPor”: “字符串”, “creadoFecha”: “/日期(-62135596800000-0000)/”, “modificadoPor”: “字符串”, “modificadoFecha” : “/日期(-62135596800000-0000)/”, “國家體制”: “字符串”, “NOTA”: “字符串”, “borrar”:假}
接着
以下路線可用於此服務:
POST / api / zonas
PUT / api / zonas / {zonaId}
我正在嘗試使用PUT方法與我的Web服務進行通信
我的密碼
<?php $pantalla="zonas"; %id =8; $url= "http: //miapp.com /api/zonas/8".$pantalla ; $url = $url ."/" . $id; // complete url http://miapp.com/api/zonas/8 //build json $ConstructorJson = array( 'ZonaId' => $Datos['txt_codigo'], 'Nombre' => $Datos['txt_Nombre'], 'CreadoPor' => $Datos['txt_CreadoPor'], 'CreadoFecha' => $Datos['txt_CreadoFecha'], 'ModificadoPor' => $Datos['txt_ModificadoPor'], 'ModificadoFecha' => $Datos['txt_ModificadoFecha'], 'Estado' => $Datos['cbo_Estado'], 'Nota' => $Datos['txt_Notas'] ); $json = json_encode($ConstructorJson); $opts = array( "http" => array( "method" => "PUT", "header" => "Accept: application/xml\\r\\n", "content" => $json ) ); $context = stream_context_create($opts); $response = file_put_contents($url,'8',false,$context); ?>
給我以下錯誤
警告:file_put_contents(http:// miapp .com / api / zonas / 8):無法打開>流:HTTP包裝器不支持C:\\ xampp \\ htdocs \\ Codigo2.0 \\ models \\ zonas.model中的可寫連接。第34行的php
並沒有任何反應。
HTTP wrapper does not support writeable connections
-基本上,PHP告訴您“嘿,您不能使用此功能來寫存在於Internet上的文件。您如何期望我寫一個文件@ http:// miapp .com / api / zonas / 8?不會發生”。
我假設您要執行的操作是在該位置發送一個PUT請求,以更新ID為8的zonas
資源。
考慮使用適當的HTTP客戶端,該客戶端可以發送實際的HTTP請求方法並符合HTTP規范。
我在PHP中最喜歡的個人是Guzzle- http ://docs.guzzlephp.org/en/stable/。 Guzzle是一個獨立的程序包,可以從其站點下載。 您可以在任何PHP項目中使用它-不帶框架也可以不帶框架。
使用Guzzle,您可以執行以下操作:
$client = new GuzzleHttp\Client();
$json = json_encode($ConstructorJson);
$headers = [
"Accept" => "application/xml\r\n"
]
$request = new Request('PUT', $url, ['body' => $json, 'headers' => $headers]);
$client->send($request);
我寧願使用PHP curl連接。
$ConstructorJson = array(
'ZonaId' => $Datos['txt_codigo'],
'Nombre' => $Datos['txt_Nombre'],
'CreadoPor' => $Datos['txt_CreadoPor'],
'CreadoFecha' => $Datos['txt_CreadoFecha'],
'ModificadoPor' => $Datos['txt_ModificadoPor'],
'ModificadoFecha' => $Datos['txt_ModificadoFecha'],
'Estado' => $Datos['cbo_Estado'],
'Nota' => $Datos['txt_Notas']
);
$json = json_encode($ConstructorJson);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http: //miapp.com/api/zonas/8/zonas",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => $json
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"Accept: application/xml\r\n",
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
我終於解決了這個問題(謝謝凱爾·奧布賴恩)
碼
<?php // web service url + tabla + id $url = "mywebservice.com/zonas/8"; $Datos = $_POST; //create a array with dates $ConstructorJson = array( 'Nombre' => $Datos['txt_Nombre'], 'CreadoPor' => $Datos['txt_CreadoPor'], 'CreadoFecha' => $Datos['txt_CreadoFecha'], 'ModificadoPor' => $Datos['txt_ModificadoPor'], 'ModificadoFecha' => $Datos['txt_ModificadoFecha'], 'Estado' => $Datos['cbo_Estado'], 'Nota' => $Datos['txt_Notas'] ); //convert array to json $json = json_encode($ConstructorJson); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "PUT", CURLOPT_POSTFIELDS => $json, CURLOPT_HTTPHEADER => array( 'Accept: application/json', 'Content-Type: application/json', ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } ?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.