C #: POST-запрос с BASIC-аутентификацией смешивает QUERY_STRING и REQUEST_METHOD в PHP? - PullRequest
0 голосов
/ 12 октября 2010

У меня проблема с отправкой запроса POST из C # в скрипт PHP на моем сервере Apache (Windows). Все работает нормально, если только я не проинструктирую Apache требовать действительного пользователя, использующего BASIC-аутентификацию через файл .htaccess.

Но давайте наведем порядок. Я использую следующий код для отправки списка пар ключ / значение в мой PHP-скрипт с использованием HTTP-POST:

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 голосов
/ 15 июня 2011

Hm.Не заставил его работать, но реализовал собственную аутентификацию, поэтому мне больше не нужна базовая аутентификация.Все равно был бы заинтересован в рабочем решении, если у кого-нибудь есть идея; -)

...