Я изо всех сил пытаюсь разработать класс С# для входа в cPanel на веб-хостинге (Hostgator).
В PHP довольно просто использовать расширение Curl следующим образом:
$url = "http://mysite.com:2082/";
$c = curl_init($url);
curl_setopt($c, CURLOPT_USERPWD, 'user:password');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($c);
if ($result === false)
$result = curl_error($c);
curl_close($c);
file_put_contents('log.txt', $result);
//print_r($result);
Теперь вот мой класс С# с различными попытками заставить его работать:
class HTTPHandler
{
public static string Connect (string url, string userName, string password)
{
string result;
try
{
// An initial @ symbol in the password must be escaped
if (password.Length > 0)
if (password[0] == '@')
password = "\\" + password;
// Create a request for the URL.
WebRequest request = WebRequest.Create(url);
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential(userName, password);
/*
var credCache = new CredentialCache();
credCache.Add(new Uri(url), "Basic",
new NetworkCredential(userName, password));
request.Credentials = credCache;
*/
//request.Method = "POST";
//request.ContentType = "application/x-www-form-urlencoded";
/*
// Create POST data and convert it to a byte array.
string postData = string.Format("user={0}&pass={1}", userName, password);
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentLength = byteArray.Length;
request.ContentType = "application/x-www-form-urlencoded";
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
*/
// Get the response.
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Get the stream containing content returned by the server.
Stream dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);
// Display the content.
result = string.Format("Server response:\n{0}\n{1}", response.StatusDescription, reader.ReadToEnd());
// Cleanup the streams and the response.
reader.Close();
dataStream.Close();
response.Close();
}
catch (Exception e)
{
result = string.Format("There was an error:\n{0}", e.Message);
}
return result;
}
}
}
Но я продолжаю получать ошибку 401 (Unauthorized) на этапе GetResponse.
Когда я сравниваю переменные $_SERVER на моей тестовой странице локального хоста между отправками PHP и C#, я получаю одни и те же данные, за исключением того, что порт отправителя немного отличается. Критические PHP_AUTH_USER и PHP_AUTH_PW одинаковы.
Моя ОС — Windows 7 64 бит, и я использую Visual C# 2010.
Я предполагаю, что решение действительно простое, но пока я сбит с толку. Но относительный новичок в C#. Я надеюсь, что кто-то может помочь.