Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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中检索从C#应用程序发送的POST数据_C#_Php_Post_Httpwebrequest_Httpwebresponse - Fatal编程技术网

在PHP中检索从C#应用程序发送的POST数据

在PHP中检索从C#应用程序发送的POST数据,c#,php,post,httpwebrequest,httpwebresponse,C#,Php,Post,Httpwebrequest,Httpwebresponse,在这样做时,我偶然发现了一个问题,我首先搜索了SO,试图找出其他人是否有类似的问题,并发现了以下问题: 但是,当我尝试这个问题的答案中给出的代码示例时,它不起作用。我请求的PHP脚本响应一条消息,指示必须设置的POST变量未设置。这是我的C代码: 这是PHP脚本中的代码: <?php $A = strtolower($_POST["action"]); if ($A == "date") { echo date("c"); }

在这样做时,我偶然发现了一个问题,我首先搜索了SO,试图找出其他人是否有类似的问题,并发现了以下问题:

但是,当我尝试这个问题的答案中给出的代码示例时,它不起作用。我请求的PHP脚本响应一条消息,指示必须设置的POST变量未设置。这是我的C代码:

这是PHP脚本中的代码:

<?php    
    $A = strtolower($_POST["action"]);

    if ($A == "date")
    {
        echo date("c");
    }
    else if ($A == "ip")
    {
        echo $_SERVER["REMOTE_ADDR"];
    }
    else if ($A == null || $A == "")
    {
        echo "bad_request:no_argument:POST_action";
    }
    else
    {
        echo "bad_request:invalid_argument:POST_action";
    }

    exit();
?>

当我从我的C#程序发出POST请求时,我看到以下屏幕,表明变量
action
尚未设置。我是否遗漏了代码中显而易见的部分


感谢回复者。

您可能需要刷新流。我通常是这样做的:

string POSTdata = "action=" + HttpUtility.UrlEncode("date");
byte[] data = Encoding.ASCII.GetBytes(POSTdata);

POSTreq.Method = "POST";
POSTreq.ContentType = "application/x-www-form-urlencoded";
POSTreq.ContentLength = data.LongLength;

using (Stream stream = POSTreq.GetRequestStream()) {
    stream.Write(data, 0, data.Length);
    stream.Flush();
}

你可能需要冲洗水流。我通常是这样做的:

string POSTdata = "action=" + HttpUtility.UrlEncode("date");
byte[] data = Encoding.ASCII.GetBytes(POSTdata);

POSTreq.Method = "POST";
POSTreq.ContentType = "application/x-www-form-urlencoded";
POSTreq.ContentLength = data.LongLength;

using (Stream stream = POSTreq.GetRequestStream()) {
    stream.Write(data, 0, data.Length);
    stream.Flush();
}

您没有关闭请求流。看,这与您的代码非常接近

编辑


您的PHP null检查也不正确

您没有关闭请求流。看,这与您的代码非常接近

编辑


您的PHP null检查也不正确

我发现了问题所在

结果是我在请求中省略了尾随的
/
,请求得到了301'd,无论出于什么原因,它都删除了post变量

所以
http://82.41.255.140/api/post-ptr
应该是
http://82.41.255.140/api/post-ptr/


感谢所有回答的人,我已经帮你们所有人找到了答案。

我发现了问题所在

结果是我在请求中省略了尾随的
/
,请求得到了301'd,无论出于什么原因,它都删除了post变量

所以
http://82.41.255.140/api/post-ptr
应该是
http://82.41.255.140/api/post-ptr/


感谢所有回答的人,我对你们所有人都表示感谢。

尝试在帖子内容后添加CR/LF。将
POSTdata
更改为
“action=“+HttpUtility.UrlEncode(“date”)+”\r\n“
会导致网络异常。如果我单独尝试
\r
\n
也一样。您可能希望在取消引用之前检查是否设置了操作。您的意思是在PHP脚本中?如果是这样,
action
在从C#程序创建请求时总是显示为null。请尝试将CR/LF放在帖子内容之后。将
POSTdata
更改为
“action=“+HttpUtility.UrlEncode(“date”)+”\r\n
会导致WebException。如果我单独尝试
\r
\n
也一样。您可能希望在取消引用之前检查是否设置了操作。您的意思是在PHP脚本中?如果是这样,
action
在从C#程序创建请求时总是显示为空。@Lloyd-抱歉,我们是同时键入的。您的答案也是正确的。这与未收到数据的原因无关。添加
POSTstr.Close()
(请求流)仍然无法解决问题;我仍然收到“无参数”响应。使用fiddler(www.fiddler2.com)检查实际发送的内容。然后你就知道是把重点放在.Net端还是PHP端了。很抱歉这么长时间没有回复。我不得不突然走了。不管怎样,我使用了Fiddler,在我看来它是PHP方面的。我将对Imgur服务器的请求与对我的服务器的请求进行了比较,对我的服务器的请求似乎是有序的@劳埃德-对不起,我们在同一时间打字。您的答案也是正确的。这与未收到数据的原因无关。添加
POSTstr.Close()
(请求流)仍然无法解决问题;我仍然收到“无参数”响应。使用fiddler(www.fiddler2.com)检查实际发送的内容。然后你就知道是把重点放在.Net端还是PHP端了。很抱歉这么长时间没有回复。我不得不突然走了。不管怎样,我使用了Fiddler,在我看来它是PHP方面的。我将对Imgur服务器的请求与对我的服务器的请求进行了比较,对我的服务器的请求似乎是有序的。不管出于什么原因,这并不能解决问题<代码>流POSTstr=POSTreq.GetRequestStream();POSTstr.Write(数据,0,数据长度);POSTstr.Flush();POSTstr.Close()仍然生成“无参数”响应。无论出于何种原因,这都不能解决它<代码>流POSTstr=POSTreq.GetRequestStream();POSTstr.Write(数据,0,数据长度);POSTstr.Flush();POSTstr.Close()仍然生成“无参数”响应。