public async Task 测试302跳转() { var www = new Httpdoer("http://i.baidu.com/"); www.AutoRedirect = false; var result = www.Send(); Assert.AreEqual(HttpStatusCode.Redirect, result.StatusCode); www = new Httpdoer("http://i.baidu.com/"); www.AutoRedirect = true; result = www.Send(); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); www = new Httpdoer("http://i.baidu.com/"); www.AutoRedirect = false; result = await www.SendAsync(); Assert.AreEqual(HttpStatusCode.Redirect, result.StatusCode); www = new Httpdoer("http://i.baidu.com/"); www.AutoRedirect = true; result = await www.SendAsync(); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); }
public void GetTest() { Assert.IsNull(Httpdoer.Get("www.baidu.com", new { id = 1 }).Send().Exception); Assert.IsNull(Httpdoer.Get("www.baidu.com/s").Send().Exception); var req = Httpdoer.Get("www.baidu.com", new { id = 1 }, new { Authorization = "xxxx" }); Assert.AreEqual("http://www.baidu.com?id=1", req.ToString("q")); Assert.AreEqual("xxxx", req.Headers["Authorization"]); Assert.IsNull(req.Send().Exception); }
public async Task 测试异步模式下的Cookie_None() { var www = new Httpdoer("http://www.baidu.com/"); www.CookieMode = HttpCookieMode.None; var res = await www.SendAsync(); Assert.IsTrue(HttpRequest.LocalCookies.Count == 0); Assert.IsTrue(www.Cookies == null); Assert.IsTrue(res.Cookies == null); }
public async Task 测试异步模式下的Cookie_ApplicationCache() { var www = new Httpdoer("http://www.baidu.com/"); www.CookieMode = HttpCookieMode.ApplicationCache; var res = await www.SendAsync(); Assert.IsTrue(www.Cookies == HttpRequest.LocalCookies); Assert.IsTrue(www.Cookies.Count > 0); Assert.IsTrue(res.Cookies.Count > 0); }
public void 测试同步模式下的Cookie_None() { var www = new Httpdoer("http://baidu.com/"); www.CookieMode = HttpCookieMode.None; var res = www.Send(); Assert.IsTrue(HttpRequest.LocalCookies.Count == 0); Assert.IsTrue(www.Cookies == null); Assert.IsTrue(res.Cookies == null); }
public static string Translate(string text) { var www = new Httpdoer("https://api.datamarket.azure.com"); www.Method = HttpRequestMethod.Get; www.Path = "Bing/MicrosoftTranslator/v1/Translate"; www.Query.AddModel(new { Text = $"'{text}'", To = "'zh-CHS'" }); www.Headers["Authorization"] = AUTH_TOKEN; return(GetText(www.GetString())); }
public void 测试同步模式下的Cookie_ApplicationCache() { var www = new Httpdoer("http://www.baidu.com/"); www.CookieMode = HttpCookieMode.ApplicationCache; var res = www.Send(); Assert.IsTrue(www.Cookies == HttpRequest.LocalCookies); Assert.IsTrue(www.Cookies.Count > 0); Assert.IsTrue(res.Cookies.Count > 0); }
public async Task 测试异步模式下的Cookie_UserCustom() { var www = new Httpdoer("http://www.baidu.com/"); www.CookieMode = HttpCookieMode.UserCustom; var res = await www.SendAsync(); Assert.IsTrue(HttpRequest.LocalCookies.Count == 0); Assert.IsTrue(www.Cookies != HttpRequest.LocalCookies); Assert.IsTrue(www.Cookies.Count > 0); Assert.IsTrue(res.Cookies.Count > 0); }
public void 测试同步模式下的Cookie_UserCustom() { var www = new Httpdoer("http://www.baidu.com/"); www.CookieMode = HttpCookieMode.UserCustom; var res = www.Send(); Assert.IsTrue(HttpRequest.LocalCookies.Count == 0); Assert.IsTrue(www.Cookies != HttpRequest.LocalCookies); Assert.IsTrue(www.Cookies.Count > 0); Assert.IsTrue(res.Cookies.Count > 0); }
public void 测试自定义ContentType() { var www = new Httpdoer("http://www.baidu.com"); www.Path = "s"; www.Method = HttpRequestMethod.Put; www.Body.ContentType = new HttpContentType("aaabbbccc", null, null, HttpBodyParsers.Stream); www.Body.Wirte(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }); var str = www.GetString(); Trace.WriteLine(www.Response.RequestData.Raw); Assert.IsNull(www.Exception); }
public void 测试Path参数() { var www = new Httpdoer("http://www.baidu.com/{id}"); www.Params["id"] = 123; var url = www.ToString("q"); Assert.AreEqual("http://www.baidu.com/123", url); www = new Httpdoer("http://www.baidu.com/{id}"); www.Params["id"] = 123; www.Params.Add("id", "456"); url = www.ToString("q"); Assert.AreEqual("http://www.baidu.com/123,456", url); }
static void Main(string[] args) { var www = new Httpdoer("www.baidu.com"); www.Body.ContentType = HttpContentType.Json; www.Method = HttpRequestMethod.Post; www.Body.Wirte(Encoding.UTF8.GetBytes("{'a':1}")); // www.Body.AddModel(new { a = 1, b = "fdsfdas", c = new { d = true, e = DateTime.Now, f = new[] { 1, 2, 3, 4, 5 } } }); var str = www.GetString(); Console.WriteLine("-----------------------------------"); Console.WriteLine(www.Response.RequestData.Raw); Console.WriteLine("-----------------------------------"); Console.WriteLine(str); }
public void POST对象参数测试() { var www = new Httpdoer("www.baidu.com"); www.Method = HttpRequestMethod.Post; www.Body.AddModel(new { user = new { id = 1, name = "blqw", sex = true } }); www.Query.ObjectEncodeMode = ObjectEncodeMode.Default; Assert.AreEqual("user.id=1&user.name=blqw&user.sex=true", www.Body.ToString()); www.Query.ObjectEncodeMode = ObjectEncodeMode.JQuery; Assert.AreEqual("user[id]=1&user[name]=blqw&user[sex]=true", Uri.UnescapeDataString(www.Body.ToString())); www.Query.ObjectEncodeMode = ObjectEncodeMode.Json; Assert.AreEqual("user="******"{\"id\":1,\"name\":\"blqw\",\"sex\":true}"), www.Body.ToString()); www.Query.ObjectEncodeMode = ObjectEncodeMode.NameOnly; Assert.AreEqual("id=1&name=blqw&sex=true", www.Body.ToString()); }
//写入参数 private void WriteParams(Httpdoer doer) { if (tabRequestData.SelectedTab == pageCustomRequestData) { doer.Body.Wirte((doer.Body.ContentType.Charset ?? Encoding.UTF8).GetBytes(txtCustomRequestData.Text)); } else { foreach (DataGridViewRow row in gridParams.Rows) { if (row.IsNewRow) { continue; } var name = row.Cells[colParamsName.Name].Value as string ?? ""; var location = row.Cells[colParamsLocation.Name].Value as string; var value = row.Cells[colParamsValue.Name].Value as string; switch (location) { case null: case "Auto": doer.Params.Add(name, value); break; case "Query": doer.Query.Add(name, value); break; case "Body": doer.Body.Add(name, value); break; case "Header": doer.Headers.Add(name, value); break; case "Path": doer.PathParams.Add(name, value); break; default: break; } } } }
public void POST数组参数测试() { var www = new Httpdoer("www.baidu.com"); www.Method = HttpRequestMethod.Post; www.Body.AddModel(new { a = new[] { 1, 2, 3 } }); www.Query.ArrayEncodeMode = ArrayEncodeMode.Default; Assert.AreEqual("a=1&a=2&a=3", www.Body.ToString()); www.Query.ArrayEncodeMode = ArrayEncodeMode.Asp; Assert.AreEqual("a[0]=1&a[1]=2&a[2]=3", Uri.UnescapeDataString(www.Body.ToString())); www.Query.ArrayEncodeMode = ArrayEncodeMode.JQuery; Assert.AreEqual("a[]=1&a[]=2&a[]=3", Uri.UnescapeDataString(www.Body.ToString())); www.Query.ArrayEncodeMode = ArrayEncodeMode.Json; Assert.AreEqual("a=" + Uri.EscapeDataString("[1,2,3]"), www.Body.ToString()); www.Query.ArrayEncodeMode = ArrayEncodeMode.Merge; Assert.AreEqual("a=1,2,3", www.Body.ToString()); }
public void 基本功能测试() { var www = new Httpdoer("https://api.datamarket.azure.com"); www.Method = HttpRequestMethod.Get; www.Path = "Bing/MicrosoftTranslator/v1/Translate"; www.Query.AddModel(new { Text = "'hello world'", To = "'zh-CHS'" }); www.Headers["Authorization"] = AUTH_TOKEN; var str = www.GetString(); Assert.AreEqual("世界您好", GetText(str)); }
public async Task 设置Method() { var www = new Httpdoer("www.baidu.com"); var result = www.Send(); Assert.IsNull(result.Exception); www = new Httpdoer("www.baidu.com"); result = await www.SendAsync(); Assert.IsNull(result.Exception); www = new Httpdoer("www.baidu.com"); www.Body.Add("name", "value"); Assert.AreEqual(HttpRequestMethod.Post, www.Method); Assert.AreEqual("POST", www.HttpMethod); Assert.IsNotNull(www.Body.ToString()); Assert.AreEqual(HttpContentType.Form, www.Body.ContentType); }
public void 测试生成Url() { var www = new Httpdoer("www.baidu.com"); www.Path = "s"; Assert.AreEqual("http://www.baidu.com/s", www.ToString("q")); www.Path = "/s"; Assert.AreEqual("http://www.baidu.com/s", www.ToString("q")); www.Query.Add("id", "1"); Assert.AreEqual("http://www.baidu.com/s?id=1", www.ToString("q")); www.Path = "/s/"; Assert.AreEqual("http://www.baidu.com/s/?id=1", www.ToString("q")); www.Path = "/s/?id=2"; Assert.AreEqual("http://www.baidu.com/s/?id=2&id=1", www.ToString("q")); www = new Httpdoer("www.baidu.com?id=3"); www.Path = "s?id=2"; Assert.AreEqual("http://www.baidu.com/s?id=2", www.ToString("q")); www.Query.Add("id", "1"); Assert.AreEqual("http://www.baidu.com/s?id=2&id=1", www.ToString("q")); www.Path = "?id=2"; Assert.AreEqual("http://www.baidu.com/?id=2&id=1", www.ToString("q")); www.Path = "&id=2"; Assert.AreEqual("http://www.baidu.com/?id=3&id=2&id=1", www.ToString("q")); www = new Httpdoer("www.baidu.com/a?id=3"); www.Path = "s?id=2"; Assert.AreEqual("http://www.baidu.com/s?id=2", www.ToString("q")); www = new Httpdoer("www.baidu.com/a/b"); www.Path = "c"; Assert.AreEqual("http://www.baidu.com/a/c", www.ToString("q")); }
public void 测试同步模式下的Cookie_CustomOrCache() { var www = new Httpdoer("http://www.baidu.com/"); www.CookieMode = HttpCookieMode.UserCustom; var res = www.Send(); Assert.IsTrue(HttpRequest.LocalCookies.Count == 0); Assert.IsTrue(www.Cookies != HttpRequest.LocalCookies); Assert.IsTrue(www.Cookies.Count > 0); Assert.IsTrue(res.Cookies.Count > 0); var count = www.Cookies.Count; www = new Httpdoer("http://www.baidu.com/"); www.CookieMode = HttpCookieMode.CustomOrCache; HttpRequest.LocalCookies.Add(new Cookie("aa", "11", "/", "www.baidu.com")); res = www.Send(); Assert.IsTrue(www.Cookies != HttpRequest.LocalCookies); Assert.IsTrue(www.Cookies.Count == count + 1); Assert.IsTrue(res.Cookies.Count > 0); }
public void 测试头编码() { var model = new { OwnerId = 510789, BrokerKId = 49005, BrokerName = "肖佳", Phone = "15012345600", EarnestMoney = 15200, HouseList = new[] { new { VillageName = "凤凰城", Building = "1幢", HouseId = "12" } } }; var www = new Httpdoer("www.baidu.com"); //www.Timeout = new TimeSpan(0,0,1); www.Headers.KeepAlive = true; www.Cookies.Add(new Uri("http://www.baidu.com"), new Cookie("sessionid", "123456789")); www.Body.AddModel(model); www.Method = HttpRequestMethod.Post; www.Body.ContentType = HttpContentType.Json; www.GetString(); }
protected virtual async Task SendRequest() { await Task.Delay(1); rtxtLogs.Clear(); var request = new Httpdoer(txtURL.Text) { UseCookies = true, Timeout = TimeSpan.FromSeconds(decimal.ToDouble(numTimeout.Value)), Proxy = null, }; request.Trackings.Add(new BuibuiTracking()); //设置Cookie if (ckbKeepCookie.Checked) { request.Cookies = _cookies; } request.Headers.KeepAlive = ckbKeepAlive.Checked; request.Logger.Listeners.Add(new BuibuiListener(rtxtLogs)); request.HttpMethod = cbbHttpMethod.Text; if (!string.IsNullOrWhiteSpace(cbbContentType.Text)) { request.Body.ContentType = cbbContentType.Text; } //写入参数 WriteParams(request); //var response = request.Send(); var response = await request.SendAsync(); //返回正文 rtxtResponseBody.Tag = response?.Body?.ResponseBody; //设置编码 var encoding = response?.Body?.ContentType.Charset?.WebName; if (encoding == cbbEncoding.Text) { cbbEncoding_SelectedIndexChanged(cbbEncoding, EventArgs.Empty); } else { cbbEncoding.Text = response?.Body?.ContentType.Charset?.WebName; } txtRequestRaw.Text = response?.RequestData.Raw; txtResponseRaw.Text = response?.ResponseRaw; //显示视图 if (response?.Body?.ContentType.Format?.ToLowerInvariant() == "json") { ShowJson(); } else { ShowView(); } //返回头 ShowResponseHeaders(response); //显示Cookie ShowResponseCookie(response); if (response.Cookies != null) { _cookies.Add(response.Cookies); } if (response.Exception != null) { request.Error(response.Exception); SaveHistory(); throw new NotImplementedException(response.Exception.Message, response.Exception); } SaveHistory(); }