簡體   English   中英

如何使用PHP使用我的Web服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM