programing

응답에서 텍스트 읽기

cafebook 2023. 7. 2. 20:58
반응형

응답에서 텍스트 읽기

HttpWebRequest request = WebRequest.Create("http://google.com") as HttpWebRequest;  

request.Accept = "application/xrds+xml";  
HttpWebResponse response = (HttpWebResponse)request.GetResponse();  

WebHeaderCollection header = response.Headers;

여기서 Google은 텍스트를 반환합니다.어떻게 읽습니까?

당신의."application/xrds+xml"문제가 발생하여 콘텐츠 길이가 0(응답 없음)으로 표시되었습니다.

해당 항목을 제거한 후 다음을 사용하여 응답에 액세스할 수 있습니다.response.GetResponseStream().

HttpWebRequest request = WebRequest.Create("http://google.com") as HttpWebRequest;

//request.Accept = "application/xrds+xml";  
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

WebHeaderCollection header = response.Headers;

var encoding = ASCIIEncoding.ASCII;
using (var reader = new System.IO.StreamReader(response.GetResponseStream(), encoding))
{
    string responseText = reader.ReadToEnd();
}

승인된 답변이 올바르게 처리되지 않습니다.WebResponse또는 텍스트를 디코딩합니다.또한 .NET 4.5에는 이를 위한 새로운 방법이 있습니다.

HTTP GET을 수행하고 응답 텍스트를 읽으려면 다음을 수행합니다.

.NET 1.1 ‒ 4.0

public static string GetResponseText(string address)
{
    var request = (HttpWebRequest)WebRequest.Create(address);

    using (var response = (HttpWebResponse)request.GetResponse())
    {
        var encoding = Encoding.GetEncoding(response.CharacterSet);

        using (var responseStream = response.GetResponseStream())
        using (var reader = new StreamReader(responseStream, encoding))
            return reader.ReadToEnd();
    }
}

.NET 4.5

private static readonly HttpClient httpClient = new HttpClient();

public static async Task<string> GetResponseText(string address)
{
    return await httpClient.GetStringAsync(address);
}

방금 제가 직접 시도해 봤는데, 200 OK 응답을 받았는데, 내용이 없습니다. 내용 길이는 0이었습니다.당신은 그것이 당신에게 콘텐츠를 제공하는 것이 확실합니까?어쨌든, 저는 당신이 정말 만족스럽다고 생각합니다.

실제 텍스트를 다시 가져오는 것은 인코딩을 아는 것에 달려 있으며, 이는 까다로울 수 있습니다.내용 유형 헤더에 있어야 하지만 구문 분석 등을 수행해야 합니다.

그러나 이것이 실제로 XML(예: "http://google.com/xrds/xrds.xml ")이라면 훨씬 쉽습니다.XML을 메모리에 로드하기만 하면 됩니다(예: LINQ를 통해 XML로).예:

using System;
using System.IO;
using System.Net;
using System.Xml.Linq;
using System.Web;

class Test
{
    static void Main()
    {
        string url = "http://google.com/xrds/xrds.xml";
        HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);

        XDocument doc;
        using (WebResponse response = request.GetResponse())
        {
            using (Stream stream = response.GetResponseStream())
            {
                doc = XDocument.Load(stream);
            }
        }
        // Now do whatever you want with doc here
        Console.WriteLine(doc);
    }   
}

내용이 XML인 경우 결과를 XML 개체 모델로 가져오는 것입니다.XDocument,XmlDocument또는XmlReader)는 일반 텍스트보다 더 가치가 있을 수 있습니다.

이 문서에서는 HttpWebResponse 개체 사용에 대한 좋은 개요를 제공합니다.HttpWebResponse 사용 방법

아래 관련 비트:

HttpWebResponse webresponse;

webresponse = (HttpWebResponse)webrequest.GetResponse();

Encoding enc = System.Text.Encoding.GetEncoding(1252);
StreamReader loResponseStream = new StreamReader(webresponse.GetResponseStream(),enc);

string Response = loResponseStream.ReadToEnd();

loResponseStream.Close();
webresponse.Close();

return Response;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.google.com");
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string strResponse = reader.ReadToEnd();

response.GetResponseStream()응답 스트림을 반환하는 데 사용해야 합니다.그리고 잊지 마세요.closeStream그리고.Response물건들.

http 요청이 Post인 경우request.Accept = "application/x-www-form-urlencoded";그러면 아래 코드로 응답 텍스트를 얻을 수 있을 것 같습니다.

var contentEncoding = response.Headers["content-encoding"];
                        if (contentEncoding != null && contentEncoding.Contains("gzip")) // cause httphandler only request gzip
                        {
                            // using gzip stream reader
                            using (var responseStreamReader = new StreamReader(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress)))
                            {
                                strResponse = responseStreamReader.ReadToEnd();
                            }
                        }
                        else
                        {
                            // using ordinary stream reader
                            using (var responseStreamReader = new StreamReader(response.GetResponseStream()))
                            {
                                strResponse = responseStreamReader.ReadToEnd();
                            }
                        }

언급URL : https://stackoverflow.com/questions/3273205/read-text-from-response

반응형