HttpClient PostAsync

作者:刘杰
链接:http://www.zhihu.com/question/28050747/answer/41181841
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

String result = ""; HttpResponseMessage response = new HttpResponseMessage(); HttpClient httpClient = new HttpClient(); //登陆页面网址 String urlLogin = "https://ids-swust.fayea.com/cas/login?service=https%3A%2F%2Fmatrix%2Edean%2Eswust%2Eedu%2Ecn%2FacadmicManager%2Findex%2Ecfm%3Fevent%3DstudentPortal%3ADEFAULT%5FEVENT"; //登陆成功页面(倒计时,未真正进入主页) String urlLogined = "https://matrix.dean.swust.edu.cn/acadmicManager/index.cfm?event=studentPortal:DEFAULT_EVENT/"; //主页,需加上从上一个网页获取的ticket String urlMainPage = "https://matrix.dean.swust.edu.cn/acadmicManager/index.cfm?event=studentPortal:DEFAULT_EVENT&ticket="; //课表页面 String urlTable = "https://matrix.dean.swust.edu.cn/acadmicManager/index.cfm?event=studentPortal:courseTable"; //设置 httpClient.MaxResponseContentBufferSize = 256000; httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36"); //进入登录页面(这一步是不是必须的安?) response = await httpClient.GetAsync(new Uri(urlLogin)); //result = response.Content.ReadAsStringAsync().Result; //要post去的信息 List<KeyValuePair<String, String>> paramList = new List<KeyValuePair<String, String>>(); paramList.Add(new KeyValuePair<string, string>("lt", "LT-F11BE3E7-DC17-B420-8430351ECF173F51")); paramList.Add(new KeyValuePair<string, string>("username", username)); paramList.Add(new KeyValuePair<string, string>("password", password)); paramList.Add(new KeyValuePair<string, string>("service", urlLogined)); //post过去,得到倒计时的页面 response = await httpClient.PostAsync(new Uri(urlLogin), new FormUrlEncodedContent(paramList)); result = response.Content.ReadAsStringAsync().Result; //把得到的ticket加上再get几次,因为有倒计时,只好循环get直到内容变化,证明成功进入主页为止 int length = 0; for (int i = 0; i<10; i++)// { response = await httpClient.GetAsync(new Uri(urlMainPage)+GetTicket(result));//urlAim + GetTicket(result) result = response.Content.ReadAsStringAsync().Result; if (i == 0)//记录第一次得到的源码长度,肯定没有成功进入 length = result.Length; if (i > 0 && result.Length != length) break;//登陆成功 } //进入课表页面 response = await httpClient.GetAsync(new Uri(urlTable)); result = response.Content.ReadAsStringAsync().Result; httpClient.Dispose();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
HttpClientPostAsync方法是用来向指定的URI发送一个HTTP POST请求。在引用和引用中,使用了HttpClient的构造函数来创建一个HttpClient实例,并设置了请求的基地址。然后,使用PostAsync方法来发送POST请求,并传递请求的URI和请求内容。在这种情况下,引用中的代码示例是将文件和参数上传到指定的URI "/Company/AddFile"。 要确保服务器端能够正确接收参数,有几个要点需要注意。首先,确保请求的URI和服务器端的路由配置匹配。其次,确保请求的参数正确地包装在HttpContent对象中,以便传递到服务器端。最后,确保服务器端能够正确解析和处理请求。 在你的情况下,你可能错过了将文件和参数正确地包装在请求内容中。你可以使用MultipartFormDataContent类来创建一个用于包装文件和参数的HttpContent对象。首先,创建一个新的MultipartFormDataContent对象,然后使用Add方法将文件和参数添加到内容中。然后,将创建的内容对象作为PostAsync方法的第二个参数传递。 以下是一个示例代码,展示了如何使用HttpClientPostAsync方法将文件和参数上传到远程服务器: using (var client = new HttpClient(handler) {BaseAddress = new Uri(_host)}) { var content = new MultipartFormDataContent(); // 添加文件 var fileContent = new ByteArrayContent(fileBytes); content.Add(fileContent, "file", "filename.ext"); // 添加其他参数 content.Add(new StringContent("value1"), "param1"); content.Add(new StringContent("value2"), "param2"); // 发送POST请求 var response = await client.PostAsync("/Company/AddFile", content); // 处理响应 // ... } 通过按照上述步骤,你应该能够成功地使用HttpClientPostAsync方法将文件和参数上传到远程服务器。确保在创建内容对象时正确设置文件、参数的名称以及文件的字节数组。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [如何通过HttpClient PostAsync方法将文件和参数上传到远程服务器?](https://blog.csdn.net/weixin_30700095/article/details/119504695)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值