방법: 프록시를 사용하여 HTTP 요청 보내기
업데이트: 2007년 11월
.NET Compact Framework는 웹 서비스를 지원합니다. 이 예제에서는 지정된 프록시를 사용하거나 사용하지 않고 HTTP GET 요청을 제출합니다.
예제
다음 코드 예제에서는 단추 클릭을 통해 요청을 제출하고 응답을 처리합니다. 제출된 요청은 지정된 경우에만 프록시를 사용하고 WebException 클래스를 사용하여 예외를 처리합니다. 또한 StreamReader를 사용하여 HTML 응답을 문자 배열 버퍼로 읽어 들입니다.
Private ReceiveStream As System.IO.Stream
Private sr As System.IO.StreamReader
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
' Get URL and proxy
' from the text boxes.
Dim url As String = txtURL.Text
Dim proxy As String = txtProxy.Text
Try
If Not "".Equals(txtProxy.Text) Then
Dim proxyObject As New WebProxy(proxy, 80)
' Disable proxy use when the host is local.
proxyObject.BypassProxyOnLocal = True
' HTTP requests use this proxy information.
GlobalProxySelection.Select = proxyObject
End If
Dim req As WebRequest = WebRequest.Create(url)
Dim result As WebResponse = req.GetResponse()
ReceiveStream = result.GetResponseStream()
Dim encode As Encoding = System.Text.Encoding.GetEncoding("utf-8")
sr = New StreamReader(ReceiveStream, encode)
' Read the stream into arrays of 30 characters
' to add as items in the list box. Repeat until
' buffer is read.
Dim read(29) As [Char]
Dim count As Integer = sr.Read(read, 0, 30)
While count > 0
Dim str As New String(read, 0, count)
lstResults.Items.Add(str)
count = sr.Read(read, 0, 30)
End While
Catch ex As WebException
Dim message As String = ex.Message
Dim response As HttpWebResponse = CType(ex.Response, HttpWebResponse)
If Nothing Is response Then
Else
message = response.StatusDescription
response.Close()
End If
lstResults.Items.Add(message)
Catch ex As Exception
lstResults.Items.Add(ex.Message)
Finally
ReceiveStream.Close()
sr.Close()
End Try
End Sub
Stream ReceiveStream = null;
StreamReader sr = null;
private void button1_Click(object sender, System.EventArgs e)
{
// Get URL and proxy
// from the text boxes.
string url = txtURL.Text;
string proxy = txtProxy.Text;
try
{
if(!"".Equals(txtProxy.Text))
{
WebProxy proxyObject = new WebProxy(proxy, 80);
// Disable proxy use when the host is local.
proxyObject.BypassProxyOnLocal = true;
// HTTP requests use this proxy information.
GlobalProxySelection.Select = proxyObject;
}
WebRequest req = WebRequest.Create(url);
WebResponse result = req.GetResponse();
ReceiveStream = result.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
sr = new StreamReader( ReceiveStream, encode );
// Read the stream into arrays of 30 characters
// to add as items in the list box. Repeat until
// buffer is read.
Char[] read = new Char[30];
int count = sr.Read( read, 0, 30 );
while (count > 0)
{
String str = new String(read, 0, count);
lstResults.Items.Add(str);
count = sr.Read(read, 0, 30);
}
}
catch(WebException ex)
{
string message = ex.Message;
HttpWebResponse response = (HttpWebResponse)ex.Response;
if(null != response)
{
message = response.StatusDescription;
response.Close();
}
lstResults.Items.Add(message);
}
catch(Exception ex)
{
lstResults.Items.Add(ex.Message);
}
finally
{
ReceiveStream.Close();
sr.Close();
}
}
코드 컴파일
이 예제에는 다음과 같은 네임스페이스에 대한 참조가 필요합니다.