我遇到了从C#向我的Apache(Windows)服务器上的PHP脚本发送POST请求的问题。一切正常,除非我指示Apache要求有效用户通过.htaccess
文件使用BASIC身份验证。
但是让我们把事情整理好。我正在使用以下代码使用HTTP-POST将密钥/值对列表发送到我的PHP脚本:
NameValueCollection nameValues = new NameValueCollection();
nameValues["operation"] = ...;
nameValues["order"] = ...;
nameValues["status"] = ...;
nameValues["comment"] = ...;
nameValues["user"] = ...;
WebClient webClient = new WebClient();
try
{
CredentialCache credentialCache = new CredentialCache();
credentialCache.Add(new Uri(PERFORM_URL), "Basic", new NetworkCredential(PERFORM_USER, PERFORM_PASSWORD));
webClient.Credentials = credentialCache;
byte[] response = webClient.UploadValues(PERFORM_URL, "POST", nameValues);
string responseString = Encoding.ASCII.GetString(response);
}
finally
{
webClient.Dispose();
}
服务器上的PHP脚本如下所示:
<?php
print_r($_SERVER);
?>
所以我只是在这里输出一些标题信息。我关闭了htaccess
文件中的基本身份验证,一切都很好。然而,当我打开它时,我得到以下输出:
Array
(
...
[REMOTE_USER] => ****
[AUTH_TYPE] => Basic
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => operation=updatestatus&order=185&status=17&comment=Test&user=somenamePOST
[QUERY_STRING] =>
...
[PHP_AUTH_USER] => ****
[PHP_AUTH_PW] => ****
[REQUEST_TIME] => 1286889387
[argv] => Array
(
)
[argc] => 0
)
其中,REQUEST_METHOD
包含所有参数+附加的POST
。这是错的。我能做些什么呢?我还阅读并尝试了解决方案,人们使用HttpWebRequest
属性使用PreAuthenticate
- 但这对我来说也不起作用。
答案 0 :(得分:0)
嗯。没有让它工作,但通过自己的身份验证实现,所以我不再需要基本身份验证。如果有人有想法,仍然会对工作解决方案感兴趣; - )