前言
httpwebrequest是一个常用的类,用于发送和接收http请求。在c#中使用httpwebrequest可以实现各种功能,包括发送get和post请求、处理cookie、设置请求头、添加参数等。本文将深入介绍httpwebrequest的用法,并给出一些常见的示例。

1. 发送get请求
使用httpwebrequest发送get请求非常简单,只需指定目标url即可。以下是发送get请求的示例代码:
using system;
using system.io;
using system.net;
class program
{
static void main()
{
string url = "https://www.example.com/api/data";
httpwebrequest request = (httpwebrequest)webrequest.create(url);
request.method = "get";
httpwebresponse response = (httpwebresponse)request.getresponse();
using (streamreader streamreader = new streamreader(response.getresponsestream()))
{
string responsedata = streamreader.readtoend();
console.writeline(responsedata);
}
}
}
上述代码中,首先通过webrequest.create方法创建一个httpwebrequest实例,并指定目标url。然后设置请求方法为get,通过getresponse方法发送请求并获取响应。最后通过streamreader对象读取响应数据。

2. 发送post请求
发送post请求与发送get请求类似,只需将请求方法设置为post,并设置请求体的数据。以下是发送post请求的示例代码:
using system;
using system.io;
using system.net;
using system.text;
class program
{
static void main()
{
string url = "https://www.example.com/api/data";
string requestdata = "param1=value1¶m2=value2";
byte[] bytedata = encoding.utf8.getbytes(requestdata);
httpwebrequest request = (httpwebrequest)webrequest.create(url);
request.method = "post";
request.contenttype = "application/x-www-form-urlencoded";
request.contentlength = bytedata.length;
using (stream requeststream = request.getrequeststream())
{
requeststream.write(bytedata, 0, bytedata.length);
}
httpwebresponse response = (httpwebresponse)request.getresponse();
using (streamreader streamreader = new streamreader(response.getresponsestream()))
{
string responsedata = streamreader.readtoend();
console.writeline(responsedata);
}
}
}
上述代码中,首先将请求体的数据转换为字节数组,并设置请求方法为post。然后设置content-type头为application/x-www-form-urlencoded,并设置请求体的长度。接着通过getrequeststream方法获取请求流,并将请求数据写入请求流中。发送请求并获取响应的过程与发送get请求相同。

3. 设置请求头和处理cookie
httpwebrequest还提供了一些方法和属性来设置请求头和处理cookie。以下是设置请求头和处理cookie的示例代码:
using system;
using system.io;
using system.net;
class program
{
static void main()
{
string url = "https://www.example.com/api/data";
httpwebrequest request = (httpwebrequest)webrequest.create(url);
request.method = "get";
// 设置请求头
request.headers["authorization"] = "bearer xxxxxxx";
request.useragent = "mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/96.0.4664.45 safari/537.36";
// 处理cookie
request.cookiecontainer = new cookiecontainer();
request.cookiecontainer.add(new uri(url), new cookie("cookie1", "value1"));
httpwebresponse response = (httpwebresponse)request.getresponse();
using (streamreader streamreader = new streamreader(response.getresponsestream()))
{
string responsedata = streamreader.readtoend();
console.writeline(responsedata);
}
}
}
上述代码中,使用request.headers属性可以设置请求头的键值对。通过设置useragent属性可以伪装请求的浏览器标识。通过创建cookiecontainer对象并使用add方法添加cookie来处理cookie。
4. 添加参数和处理响应
使用httpwebrequest发送请求时,可能需要添加一些参数和在接收到响应后进行处理。以下是添加参数和处理响应的示例代码:
using system;
using system.io;
using system.net;
using system.text;
class program
{
static void main()
{
string url = "https://www.example.com/api/data";
string requestdata = "param1=value1¶m2=value2";
byte[] bytedata = encoding.utf8.getbytes(requestdata);
httpwebrequest request = (httpwebrequest)webrequest.create(url);
request.method = "post";
request.contenttype = "application/x-www-form-urlencoded";
request.contentlength = bytedata.length;
using (stream requeststream = request.getrequeststream())
{
requeststream.write(bytedata, 0, bytedata.length);
}
httpwebresponse response = (httpwebresponse)request.getresponse();
// 处理响应
httpstatuscode statuscode = response.statuscode;
string statusdescription = response.statusdescription;
using (streamreader streamreader = new streamreader(response.getresponsestream()))
{
string responsedata = streamreader.readtoend();
console.writeline(responsedata);
}
}
}
以上代码中,发送post请求时添加了一些参数,然后获取响应的状态码、状态描述和响应数据。
结论
使用c#中的httpwebrequest可以轻松发送和接收http请求,实现各种功能。本文介绍了httpwebrequest的用法,包括发送get和post请求、处理cookie、设置请求头、添加参数等。可以根据需要进行灵活运用,实现更强大的http请求功能。希望本文对你有所帮助!
到此这篇关于c#发送和接收http请求类httpwebrequest用法的文章就介绍到这了,更多相关c# httpwebrequest用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论