gpt4 book ai didi

php - retrofit2 发送 PUT 请求方法对于 PHP 是错误的

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:29 25 4
gpt4 key购买 nike

我正在尝试从我的 Android 应用向我的 PHP 端点发送 PUT 请求方法,但在我的端点中,PUT 请求未被识别为 PUT 请求,因此我返回了请求方法错误! 消息从我的端点。

Android接口(interface)和请求执行

激活界面

@PUT("device/activate.php")
Call<DeviceRegistry> registryDevice();

执行请求

DeviceRegistryAPI registryAPI =
RetrofitController.getRetrofit().create(DeviceRegistryAPI.class);

Call<DeviceRegistry> registryCallback = registryAPI.registryDevice();

response = registryCallback.execute();

有了这个,我期待一个响应,但我收到了我的端点错误消息。


我的 PHP 端点

if($_SERVER['REQUEST_METHOD'] == "PUT"){
//doing something with the data
} else {
$data = array("result" => 0, "message" => "Request method is wrong!");
}

我不知道为什么 $_SERVER['REQUEST_METHOD'] == "PUT" 是错误的,但我想知道我是否在 Retrofit 2 上遗漏了什么。


更多信息。

我正在使用 Retrofit2。


更新 1:将 json 发送到正文

我正在尝试使用正文发送 json。

这是我的 json:

{
"number": 1,
"infoList": [
{
"id": 1,
"info": "something"
},
{
"id": 2,
"info": "something"
}
]
}

有我的类(class):

class DataInfo{

public int number;
public List<Info> infoList;

public DataInfo(int number, List<Info> list){
this.number = number;
this.infoList = list;
}
}


class Info{
public int id;
public String info;
}

我将 PUT 接口(interface)更改为:

@PUT("device/activate.php")
Call<DeviceRegistry> registryDevice(@Body DataInfo info);

但是我遇到了同样的问题。


更新 2:我需要标题吗

我的 REstfull 客户端中有这个 header :

Accept: application/json
Content-Type: application/x-www-form-urlencoded

我需要把这个放在我的请求配置中吗?如果需要,我该怎么做?

更新3:检查我发帖的请求类型。

现在我正在检查请求的类型。因为我对 PUT/POST 请求有同样的问题。所以如果能用put解决问题,也许所有的问题都会迎刃而解。

当我执行请求并询问和检查请求时,它正在发送类型 (PUT/POST) 但在服务器 php 中仅检测或 GET? (以下示例使用 POST 并且行为相同)

Call<UpdateResponse> requestCall = client.updateMedia(downloadItemList);
Log.i("CCC", requestCall .request().toString());

输出是一个POST:

Request{method=POST, url=http://myserver/api/v1/media/updateMedia.php, tag=null}

所以我正在向服务器发送 POST(无论我是否发送 PUT)请求,但为什么在服务器中我收到 GET。我被锁了!!!不知道哪里出了问题。

更新 4:godaddy 托管。

我的 php 服务器托管在 godaddy 上。这有什么问题吗?我创建了一个本地主机,一切都很好,但相同的代码在 godaddy 上不起作用。我做了一些研究,但没有找到解决这个问题的好方法,所以 godaddy 托管可能是问题所在吗?

最佳答案

PHP 不识别 GET 和 POST 以外的任何东西。服务器应该向您抛出某种错误,例如空请求。

To access PUT和其他请求使用

$putfp = fopen('php://input', 'r'); //will be a JSON string (provided everything got sent)
$putdata = '';
while($data = fread($putfp, filesize('php://input')))
$putdata .= $data;
fclose($putfp);
//php-like variable, if you want
$_PUT = json_decode($putdata);

没有测试,但应该可以。

关于php - retrofit2 发送 PUT 请求方法对于 PHP 是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38284179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com