2012-05-13 5 views
0

Так что я делаю программу, в которой вы вводите некоторую информацию. Одна часть информации требует многого текста, мы говорим о 100+ персонажах. Я обнаружил, что когда данные будут большими, он не отправит данные вообще. Вот код, я использую:Отправка большого количества данных POST

public void HttpPost(string URI, string Parameters) 
    { 
     // this is what we are sending 
     string post_data = Parameters; 

     // this is where we will send it 
     string uri = URI; 

     // create a request 
     HttpWebRequest request = (HttpWebRequest) WebRequest.Create(uri); 
     request.KeepAlive = false; 
     request.ProtocolVersion = HttpVersion.Version10; 
     request.Method = "POST"; 

     // turn our request string into a byte stream 
     byte[] postBytes = Encoding.ASCII.GetBytes(post_data); 

     // this is important - make sure you specify type this way 
     request.ContentType = "application/x-www-form-urlencoded"; 
     request.ContentLength = postBytes.Length; 
     Stream requestStream = request.GetRequestStream(); 

     // now send it 
     requestStream.Write(postBytes, 0, postBytes.Length); 
     requestStream.Close(); 
    } 

Я затем вызвать этот метод следующим образом:

HttpPost(url, "data=" + accum + "&pass=HRS"); 

«Accum» является большой объем данных, которые я посылаю. Этот метод работает, если я отправляю небольшой объем данных. Но тогда, когда он большой, он не отправит. Есть ли способ отправить почтовый запрос на страницу .php на моем веб-сайте, которая может превышать 100+ символов?

Спасибо.

+2

Ваша проблема не должна превышать 100 символов, разве у вас нет каких-либо '?' Или '&' в вашей переменной-накопителе? – Ciro

+0

Я этого не делаю: \ Я только что отправил этот http://puu.sh/urKY, и он даже не отправил его. –

ответ

4

Вы - только, вызывающий GetRequestStream. Это не сделает запрос - по умолчанию он будет буферизован в памяти, IIRC.

Чтобы отправить запрос на веб-сервер, необходимо позвонить WebRequest.GetResponse().

Меняем конец кода на:

// Using statement to auto-close, even if there's an exception 
using (Stream requestStream = request.GetRequestStream()) 
{ 
    requestStream.Write(postBytes, 0, postBytes.Length); 
} 

// Now we're ready to send the data, and ask for a response 
using (WebResponse response = request.GetResponse()) 
{ 
    // Do you really not want to do anything with the response? 
} 
+0

Я не хочу ответа, я хочу отправить данные. –

+0

@ DuncanPalmer: Вам все равно нужно вызвать 'GetResponse' для фактического отправки данных. Поэтому используйте код, который я опубликовал, и игнорируем ответ (кроме проверки автоматического кода состояния). Обратите внимание, что вы * do * все еще хотите использовать инструкцию 'using'. –

+0

Хорошо, я сделал, как вы сказали, и он все равно не отправит. :( –

0

Я использую этот способ отправки данных в формате JSON внутри запроса, я предполагаю, что это немного по-другому, но он может работать,

httpWebRequest = (HttpWebRequest)WebRequest.Create(RequestURL); 
httpWebRequest.ContentType = "application/json"; 
       httpWebRequest.Accept = "application/json"; 
       httpWebRequest.Method = "POST"; 
String username = "UserName"; 
String password = "passw0rd"; 
String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password)); 
httpWebRequest.Headers.Add("Authorization", "Basic " + encoded); 
using (StreamWriter sw = new StreamWriter(httpWebRequest.GetRequestStream())) 
       { 
        string json = "{" + 
            "\"user\":[ \"" + user + "\"] " + 
            "}"; 
        sw.Write(json); 
        sw.Flush(); 
        sw.Close(); 
       } 
using (HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse()) 
       { 


        //var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
        { 
         var responseText = streamReader.ReadToEnd(); 
         //Now you have your response. 
         //or false depending on information in the response 
        } 

        httpResponse.Close(); 
       } 
Смежные вопросы