2016-08-12 34 views
2

HTTP応答をテキストファイルに保存することができません。私は要求を出すことができ、それが通過することがわかり、私が望む応答を得るが、それはファイルに保存されない。私のコードは以下の通りですが、私が試した他の解決策をコメントアウトしました。HTTP応答をファイルに保存する

protected void Button1_Click(object sender, EventArgs e) 
    { 
     string input = TextBox1.Text; 
     string sURL; 
     sURL = "http://api.urlvoid.com/api1000/key/host/" + input + "/"; 
     HttpWebRequest wrGETURL = (HttpWebRequest)WebRequest.Create(sURL); 
     HttpWebResponse wrResponse = (HttpWebResponse)wrGETURL.GetResponse(); 
     StreamWriter SW = new StreamWriter(@"C:\Users\user\Desktop\API_Call_Test.txt"); 
     Stream DataStream = wrResponse.GetResponseStream(); 
     StreamReader SR = new StreamReader(DataStream); 
     string AllResponse = SR.ReadToEnd(); 
     //var file = File.Open(@"C:\Users\user\Desktop\API_Call_Test.txt", FileMode.Create); 
     SW.Write(DataStream); 
     //DataStream.CopyTo(file); 
     wrResponse.Close(); 

    } 

TCPストリームのWiresharkの分析:

GET /api1000/key/host/mo.gov/        HTTP/1.1 
    Host: api.urlvoid.com 
    Connection: Keep-Alive 

    HTTP/1.1 200 OK 
    Server: nginx 
    Date: Fri, 12 Aug 2016 16:31:15 GMT 
    Content-Type: text/xml 
    Content-Length: 909 
    Age: 0 


    <?xml version="1.0" encoding="UTF-8"?> 
    <response> 
    <details> 
    <host>host</host> 
    <updated>1463838832</updated> 
    <http_response_code>200</http_response_code> 
    <domain_age>0</domain_age> 
    <google_page_rank>0</google_page_rank> 
    <alexa_rank>0</alexa_rank> 
    <connect_time>0.005995</connect_time> 
    <header_size>959</header_size> 
    <download_size>54726</download_size> 
    <speed_download>67090</speed_download> 
    <external_url_redirect></external_url_redirect> 
    <ip> 
    <addr>104.16.20.39</addr> 
    <hostname></hostname> 
    <asn>13335</asn> 
    <asname>CloudFlare, Inc.</asname> 
    <country_code>US</country_code> 
    <country_name>United States</country_name> 
    <region_name>California</region_name> 
    <city_name>San Francisco</city_name> 
    <continent_code>NA</continent_code> 
    <continent_name>North America</continent_name> 
    <latitude>37.7697</latitude> 
    <longitude>-122.393</longitude> 
    </ip> 
    </details> 
    <page_load>0.00</page_load> 
    </response> 
+1

デバッガを通じ強化していますか? – itsme86

答えて

3

さて、下記のようなものになるだろう。私はあなたがそれをうまく適応させることができると思います。あなたが要求データを書いていないし、データを読み取るためのストリームリーダーが必要

string url = "http://www.google.com"; 
string file = "response.txt"; 
string content = string.Empty; 

// set up request/response 
var request = (HttpWebRequest) WebRequest.Create(url); 
var response = (HttpWebResponse) request.GetResponse(); 
var stream = response.GetResponseStream(); 

// read response content 
using (var reader = new StreamReader(stream ?? new MemoryStream(), Encoding.UTF8)) 
    content = reader.ReadToEnd(); 

// write to file on desktop 
File.WriteAllText(
    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), file), 
    content, 
    Encoding.UTF8); 
1

protected void Button1_Click(object sender, EventArgs e) 
{ 
    string input = TextBox1.Text; 
    string sURL; 
    sURL = "http://api.urlvoid.com/api1000/key/host/" + input + "/"; 
    HttpWebRequest wrGETURL = (HttpWebRequest)WebRequest.Create(sURL); 
    using (Stream stm = wrGETURL.GetRequestStream()) 
    { 
     using (StreamWriter stmw = new StreamWriter(stm)) 
     { 
      stmw.Write(input); 
     } 
    } 
    using (StreamReader responseReader = new StreamReader(wrGETURL.GetResponse().GetResponseStream())) 
    { 
     string resultString = responseReader.ReadToEnd(); 
     if (File.Exists(@"C:\Users\user\Desktop\API_Call_Test.txt")) 
      File.Delete(@"C:\Users\user\Desktop\API_Call_Test.txt"); 
     File.Create(@"C:\Users\user\Desktop\API_Call_Test.txt").Close(); 
     File.WriteAllText(@"C:\Users\user\Desktop\API_Call_Test.txt", resultString); 
    } 
} 
関連する問題