2012-12-27 36 views
0

我試圖做使用Craigslist的批量發佈如下:的HttpWebRequest導致反應不HTTP.Data開始

HttpWebRequest request = null; 
Uri uri = new Uri("https://post.craigslist.org/bulk-rss/post"); 
request = (HttpWebRequest)WebRequest.Create(uri); 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = FormattedXmlDocument.InnerXml.Length; 
using (Stream writeStream = request.GetRequestStream()) 
{ 
    UTF8Encoding encoding = new UTF8Encoding(); 
    byte[] bytes = encoding.GetBytes(FormattedXmlDocument.InnerXml); 
    writeStream.Write(bytes, 0, bytes.Length); 
} 
string result = string.Empty; 

request.ProtocolVersion = System.Net.HttpVersion.Version11; 
request.KeepAlive = false; 
try 
{ 
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
    { 
     using (Stream responseStream = response.GetResponseStream()) 
     { 
      using (System.IO.StreamReader readStream = new System.IO.StreamReader(responseStream, Encoding.UTF8)) 
      { 
       result = readStream.ReadToEnd(); 
      } 
     } 
    } 
} 
catch (Exception exp) 
{ 
    // MessageBox.Show(exp.Message); 
} 

當執行這行代碼

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 

我得到例外:

The remote server returned an error: (500) Internal Server Error. 

我用小提琴來檢查請求,它得到以下錯誤:

Response does not start with HTTP.Data: 

和pacakage看起來是這樣的:

POST https://post.craigslist.org/bulk-rss/post HTTP/1.1 
Content-Type: application/x-www-form-urlencoded 
Host: post.craigslist.org 
Content-Length: 739 
Expect: 100-continue 
Connection: Keep-Alive 

<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cl="http://www.craigslist.org/about/cl-bulk-ns/1.0"><channel><items><rdf:li rdf:resource="TestJobPost1" /></items><cl:auth username="[email protected]" password="2749saturn" accountID="14" /></channel><item rdf:about="TestJobPost1"><cl:category>sof</cl:category><cl:area>nyc</cl:area><cl:subarea>stn</cl:subarea><cl:neighborhood>Grasmere</cl:neighborhood><cl:jobInfo compensation="100000.00" telecommuting="0" partTime="0" contract="0" nonprofit="0" internship="0" disability="0" recruitersOK="0" phoneCallsOK="0" okToContact="0" okToRepost="0" /><title>First Position</title><description><![CDATA[teset]]></description></item></rdf:RDF> 

任何幫助將非常感激。

+0

'FormattedXmlDocument.InnerXml.Length'錯誤;你需要調用'encoding.GetByteCount()'。 – SLaks

+0

更改爲'encoding.GetByteCount(FormattedXmlDocument.InnerXml);'但仍然得到相同的結果。 – jmogera

+0

嘗試移動 request.ProtocolVersion = System.Net.HttpVersion.Version11; request.KeepAlive = false;上面'GetRequestStream()' – SLaks

回答

2

寫入request.GetRequestStream()將開始發送數據到服務器。

之後設置請求屬性會破壞協議。