如何使用PHP使用我的Web服务
我有个问题。。 我的应用程序提供了以下信息: HTTP+JSON如何使用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请求和响应示例。显示的占位符需要替换为实际值 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可以在没有框架的情况下使用?是的,对不起,我无意将事情与我的语言混淆。让我在回答中重新措辞。