2012-02-23 1 views
3

Я пытаюсь преобразовать скрипт cURL в скрипт C#. Если я хочу отправить сообщение POST, мне нужно преобразовать его в строку?cURL to C# webrequest

Когда я пытаюсь запустить мой скрипт, я получаю исключение с целевой машины. К сожалению, у меня нет доступа к коду на целевой машине.

$ch = curl_init(); 
curl_setopt($ch,CURLOPT_HTTPHEADER,array("Expect:")); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC) ; 
curl_setopt($ch, CURLOPT_USERPWD, "user:pwd"); 
curl_setopt($ch, CURLOPT_URL, 'http://192.168.1.105/upload.php'); 
$data = array('type' => 'upload', 'student' => 'Peter', 'class' => '101', 'fotograf'   => 'Jane', 'file' => '@/pictures/image1.jpg'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_exec($ch); 

Это то, что я придумал:

WebRequest request = WebRequest.Create("http://192.168.1.105/upload.php"); 

request.ContentType = "application/x-www-form-urlencoded"; 
request.Method = "POST"; 
string authInfo = "usr:pwd"; 
request.Headers["Authorization"] = "Basic " + authInfo; 
byte[] buffer = Encoding.GetEncoding("UTF-8").GetBytes("type=upload&student=Peter&calss=101&fotograf=Jane&file=/pictures/image1.jpg"); 
Stream reqstr = request.GetRequestStream(); 
reqstr.Write(buffer, 0, buffer.Length); 
reqstr.Close(); 

WebResponse response = request.GetResponse(); 

Любые идеи?

+0

Не могли бы вы привести точное исключение, которое вы получаете? Это должно помочь найти точную проблему. –

+0

Я верю, потому что ваш код C# не выполняет загрузку изображения, как в код PhP. в C# нет эквивалента @, как php, вы должны написать границу в заголовках или использовать какой-либо метод, например [UploadFile()] [1] из класса WebClient. [1]: http://msdn.microsoft.com/en-us/library/36s52zhs.aspx –

+0

Исключение, которое я получаю: (417) Исключено исключение –

ответ

0

Перед записью буфера в поток, убедитесь, чтобы преобразовать его в base64 строку:

string result = System.Convert.ToBase64String(buffer); 
3

Возможно есть проблема с заголовком авторизации и замена:

string authInfo = "usr:pwd"; 
request.Headers["Authorization"] = "Basic " + authInfo; 

с:

request.UseDefaultCredentials = false; 
request.Credentials = new NetworkCredential(user, pwd); 

может решить проблему.

+0

Лучший ответ: он должен работать как с Basic, так и с Digest Аутентификация. –