C#:使用BASIC身份验证的POST请求在PHP中混合了QUERY_STRING和REQUEST_METHOD?

时间:2010-10-12 13:19:15

标签: c# php post webclient basic-authentication

我遇到了从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 - 但这对我来说也不起作用。

1 个答案:

答案 0 :(得分:0)

嗯。没有让它工作,但通过自己的身份验证实现,所以我不再需要基本身份验证。如果有人有想法,仍然会对工作解决方案感兴趣; - )