winform 客户端 HTTP协议与服务端通信以及解决中文乱码
本来从来没有仔细研究过Http协议,今天因为公司业务需求,调试了半天,终于现在会Winform用Http协议与服务端通信了,其中常用的有POST和Get方式;
仔细看了人人网和新浪等大部分都是采用GET方式获取数据的,MSN截图如下:

还是不要脱离本文的主要目的:
模拟实现登录代码如下:
private void pictureBox3_Click(object sender, EventArgs e)
{
string strUserName = textEdit1.Text.Trim(); //用户名
string strUserPwd = textEdit2.Text.Trim(); //密码 if (string.IsNullOrEmpty(strUserName) || string.IsNullOrEmpty(strUserPwd))
{
XtraMessageBox.Show("请输入用户名和密码", "Transmate", MessageBoxButtons.RetryCancel);
}
else
{
string strPostData = "emailAddress=" + strUserName + "&password=" + strUserPwd+""; HttpWebRequest httpWebRequest = WebRequest.Create("http://192.168.1.130:30160/TransmateWebService/login") as HttpWebRequest; httpWebRequest.KeepAlive = false; byte[] data = System.Text.Encoding.UTF8.GetBytes(strPostData); httpWebRequest.Method = "POST"; httpWebRequest.ContentLength = data.Length;
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
Stream NewStream = httpWebRequest.GetRequestStream();
NewStream.Write(data,,data.Length);
NewStream.Close(); HttpWebResponse response = httpWebRequest.GetResponse() as HttpWebResponse; Stream ReviceStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(ReviceStream,Encoding.UTF8);
string StrContent = streamReader.ReadToEnd(); JObject JsonObject = JObject.Parse(StrContent);
string loginCode = JsonObject["errorCode"].ToString();
string TipMessage = JsonObject["message"].ToString(); if (loginCode == "")
{
XtraMessageBox.Show("登录成功,正在跳转....");
}
else
{
XtraMessageBox.Show("登录失败,请稍候重试");
}
}
开始调试了好久,出现下面的错误:

经过不断的查找和调试,主要是少写了一句话:
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
希望对大家有帮助,后续会正对HTTP、SOAP、TCP、UDP、Https、等基本协议开一个专题讨论这写问题;
PS :2014、11、17
后来在获取服务器返回的数据时候调试发现,服务器获取的只要是中文的代码,都是乱码;但是Post数据确实是进过UTF-8编码的啊,结果才发现是httpWebRequest.ContentType = "application/x-www-form-urlencoded"; 中并没有添加对内容数据的编码,结果改为:
httpWebRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";就正确,一上午就只解决这个问题。希望贴出来,供盆友们不要走弯路
winform 客户端 HTTP协议与服务端通信以及解决中文乱码的更多相关文章
- winform 客户端采用HTTP协议与服务端通信
本来从来没有仔细研究过Http协议,今天因为公司业务需求,调试了半天,终于现在会Winform用Http协议与服务端通信了,其中常用的有POST和Get方式: 仔细看了人人网和新浪等大部分都是采用GE ...
- SuperSocket使用自定义协议与服务端通信发送实例
AsyncTcpSession tcpSession = new AsyncTcpSession(); public Encoding encoding = Encoding.GetEncoding( ...
- 二、网络编程-socket之TCP协议开发客户端和服务端通信
知识点:之前讲的udp协议传输数据是不安全的,不可靠不稳定的,tcp协议传输数据安全可靠,因为它们的通讯机制是不一样的.udp是用户数据报传输,也就是直接丢一个数据包给另外一个程序,就好比寄信给别人, ...
- socket 客户端和服务端通信
客户端要连接服务器:首先要知道服务器的IP地址.而服务器里有很多的应用程序,每一个应用程序对应一个端口号 所以客户端想要与服务器中的某个应用程序进行通信就必须要知道那个应用程序的所在服务器的IP地址, ...
- Python进阶----SOCKET套接字基础, 客户端与服务端通信, 执行远端命令.
Python进阶----SOCKET套接字基础, 客户端与服务端通信, 执行远端命令. 一丶socket套接字 什么是socket套接字: 专业理解: socket是应用层与TCP/IP ...
- Netty入门之客户端与服务端通信(二)
Netty入门之客户端与服务端通信(二) 一.简介 在上一篇博文中笔者写了关于Netty入门级的Hello World程序.书接上回,本博文是关于客户端与服务端的通信,感觉也没什么好说的了,直接上代码 ...
- Android BLE与终端通信(三)——客户端与服务端通信过程以及实现数据通信
Android BLE与终端通信(三)--客户端与服务端通信过程以及实现数据通信 前面的终究只是小知识点,上不了台面,也只能算是起到一个科普的作用,而同步到实际的开发上去,今天就来延续前两篇实现蓝牙主 ...
- 基于开源SuperSocket实现客户端和服务端通信项目实战
一.课程介绍 本期带给大家分享的是基于SuperSocket的项目实战,阿笨在实际工作中遇到的真实业务场景,请跟随阿笨的视角去如何实现打通B/S与C/S网络通讯,如果您对本期的<基于开源Supe ...
- 客户端通过HTTP协议与服务端交换数据
客户端(包括浏览器)通过HTTP协议与服务端交换数据的描述 发起请求 header 键值对中的key大小写不敏感 Accept: application/json Content-Type: ...
随机推荐
- 写出pythonic的python代码
http://www.cnblogs.com/dadadechengzi/p/6226071.html 1,列表推导(没当要对序列中的内容进行循环处理时,就应该尝试使用列表推倒) 在python中编写 ...
- mysql高可用研究(二) 主从+MHA+Atlas
关于Atlas的详细介绍请访问:https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md 为什么要使用Atlas?应用程序直连数据库不好吗? ...
- 20145229《Java程序设计》第四次实验报告
Android开发基础 实验要求 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android组件.布局管理器的使用: 3.掌握Android中事件处理机制. ...
- C语言伪随机数的注意事项
不要将srand(time(NULL))或srand(time(0))放到循环中,因为我们两次调用srand()函数设置随机数种子之间的时间间隔不超过1s,等价于使用了一个固定的随机数种子,会出现相同 ...
- hd acm1061
Problem Description Given a positive integer N, you should output the most right digit of N^N. Inp ...
- poj 1419Graph Coloring 【dfs+补图+计算最大团+计算最大独立集 【模板】】
题目地址:http://poj.org/problem?id=1419 Graph Coloring Time Limit: 1000MS Memory Limit: 10000K Total S ...
- 算法(Algorithms)第4版 练习 1.5.16
Quick-find package com.qiusongde; import edu.princeton.cs.algs4.StdDraw; import edu.princeton.cs.alg ...
- GIT使用[git remove untracked working file]
使用GIT进行merge的时候, git merge --no-ff master 如果merge之后出现问题, 想进行回退, 可以使用 git reset --hard HEAD 来回退到最新的版本 ...
- Windows- 改变cmd控制台默认显示编码
在中国的电脑会要求兼容gbk编码,所以微软进入中国市场也顺应中国的要求,其中最明显的就是在cmd上默认的显示就是GBK .当开发人员在运行一些有打印中文的程序时,由于编码采用国际兼容版本的utf_8等 ...
- Tab支持的DHTML Window控件
带有Tab标签支持的DHTML Window控件.它使用cookies来“记忆”窗体大小,位置,哪个Tab选项被选中,window堆叠顺序.代码下载地址:http://www.huiyi8.com/ ...