在PHP中检索从C#应用程序发送的POST数据
在这样做时,我偶然发现了一个问题,我首先搜索了SO,试图找出其他人是否有类似的问题,并发现了以下问题: 但是,当我尝试这个问题的答案中给出的代码示例时,它不起作用。我请求的PHP脚本响应一条消息,指示必须设置的POST变量未设置。这是我的C代码: 这是PHP脚本中的代码:在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"); }
<?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()代码>仍然生成“无参数”响应。