Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP使用我的Web服务_Php - Fatal编程技术网

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

如何使用PHP使用我的Web服务,php,Php,我有个问题。。 我的应用程序提供了以下信息: HTTP+JSON 以下是HTTP请求和响应示例。显示的占位符需要替换为实际值 POST/json/reply/Zona HTTP/1.1 主持人:AzurePro.azurewebsites.net 内容类型:应用程序/json 内容长度:长度 {“zonaId”:0,“nombre”:“String”,“creadoPor”:“String”,“creadoFecha”:“/Date(-62135596800000-0000)/”,“modifi

我有个问题。。 我的应用程序提供了以下信息:

HTTP+JSON
以下是HTTP请求和响应示例。显示的占位符需要替换为实际值

POST/json/reply/Zona
HTTP/1.1
主持人:AzurePro.azurewebsites.net
内容类型:应用程序/json
内容长度:长度

{“zonaId”:0,“nombre”:“String”,“creadoPor”:“String”,“creadoFecha”:“/Date(-62135596800000-0000)/”,“modificadoPor”:“String”,“modificadoFecha”:“/Date(-62135596800000-0000)/”,“estado”:“String”,“nota”:“String”,“borrar”:false}

然后

以下路线可用于此服务:
POST/api/zonas
PUT/api/zonas/{zonaId}

我正在尝试使用PUT方法与我的Web服务通信

我的代码

$json
)
);
$context=stream\u context\u create($opts);
$response=文件内容($url,'8',false,$context);

?>
HTTP包装器不支持可写连接
-基本上,PHP告诉您“嘿,您不能使用此函数写入internet上的文件。您希望我如何编写一个文件@HTTP://miapp.com/api/zonas/8?不会发生”

我假设您试图做的是在该位置发送一个PUT请求,以更新ID为8的
zonas
资源

解决方案 考虑使用适当的HTTP客户机,该客户机可以发送实际的HTTP请求方法并符合HTTP规范

我个人最喜欢的PHP是Guzzle- . 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;
  }

我终于解决了这个问题(谢谢你,凯尔·奥布莱恩)

代码


我尝试了您的方法,但它给了我错误(长度要求HTTP错误411。请求必须分块或具有内容长度。)@WAG您需要在标题上指定内容长度:
“内容长度:”.$yourlength,
sry bro im noob,我应该在此处放置“内容长度:”.$yourlengthin到curl\u setopt\u数组($curl,array();?
CURLOPT_HTTPHEADER=>array(“缓存控制:无缓存”,“接受:应用程序/xml\r\n”,“内容长度:”.$yourlength“,),
谢谢你的回答。但我不使用任何框架。Guzzle可以在没有框架的情况下使用?是的,对不起,我无意将事情与我的语言混淆。让我在回答中重新措辞。