데이터를 게시 한 후 웹 클리어 응답을 읽는 방법은 무엇입니까?
문제
코드를 보라 :
using (var client = new WebClient())
{
using (var stream = client.OpenWrite("http://localhost/", "POST"))
{
stream.Write(post, 0, post.Length);
}
}
이제 HTTP 출력을 어떻게 읽습니까?
해결책
당신이있는 것 같습니다 byte[]
게시 할 데이터의; 이 경우 사용하기가 더 쉬워 질 것으로 예상합니다.
byte[] response = client.UploadData(address, post);
응답이 텍스트 인 경우 :
string s = client.Encoding.GetString(response);
(또는 당신의 선택 Encoding
- 아마도 Encoding.UTF8
)
다른 팁
어디서나 스트림을 유지하고 거대한 바이트 배열을 할당하지 않으려면 (예를 들어, 큰 파일을 게시 할 계획 인 경우) 여전히 파생 된 WebClient 버전으로 수행 할 수 있습니다. 다음은이를 수행하는 샘플 코드입니다.
using (var client = new WebClientWithResponse())
{
using (var stream = client.OpenWrite(myUrl))
{
// open a huge local file and send it
using (var file = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
file.CopyTo(stream);
}
}
// get response as an array of bytes. You'll need some encoding to convert to string, etc.
var bytes = client.Response;
}
그리고 여기에 맞춤형 웹 클라이언트가 있습니다.
public class WebClientWithResponse : WebClient
{
// we will store the response here. We could store it elsewhere if needed.
// This presumes the response is not a huge array...
public byte[] Response { get; private set; }
protected override WebResponse GetWebResponse(WebRequest request)
{
var response = base.GetWebResponse(request);
var httpResponse = response as HttpWebResponse;
if (httpResponse != null)
{
using (var stream = httpResponse.GetResponseStream())
{
using (var ms = new MemoryStream())
{
stream.CopyTo(ms);
Response = ms.ToArray();
}
}
}
return response;
}
}
제휴하지 않습니다 StackOverflow