导航:首页 > 配服务器 > 客户端如何向服务器发送请求

客户端如何向服务器发送请求

发布时间:2022-09-25 13:05:21

‘壹’ 客户端怎么使用httpclient向https服务器发送数据

直接用HttpClient这个类库,每次你都用同一个cookie去登录就可以保持session了HttpClient是一个客户端的HTTP通信实现库,目标是发送和接受HTTP请求。HTTPClient维护cookies,session的保持在客户端就是cookie的体现。HttpClinet的session的保持有两种方式,一种是将HttpClient实例保存于web应用的session中,再次请求时取出,因为httpclient会维持cookies。另一种是再次请求时,将上次请求获取的cookies带入请求中,此种方式无需将httpclient保存于session中。NameValuePair[]param={newNameValuePair("username",userId),newNameValuePair("password",password)};//第一种方式httpclient保存于session,每次请求均为同一httpclient,httpclient维持cookies//HttpClientclient=(HttpClient)request.getSession().getAttribute("HTTPCLIENT");//第二种方式每次请求带入之前请求获取的cookies。HttpClientclient=newHttpClient();client.getState().addCookies(cookies);PostMethodpost=newPostMethod(url);client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"UTF-8");client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);post.setRequestBody(param);client.executeMethod(post);Cookie[]cookies=client.getState().getCookies();post.releaseConnection();

‘贰’ 要求客户端访问图片时,发出3次请求。代码

1、建立TCP连接。
2、Web浏览器向Web服务器发送请求命令
3、Web浏览器发送请求头信息。
4、Web服务器应答。
5、Web服务器发送应答头信息。
6、Web服务器向浏览器发送数据。
7、Web服务器关闭TCP连接。以上都是客户端访问图片时,发出3次请求代码的要求。

‘叁’ R爬虫必备基础—HTTP协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。Web服务器根据接收到的请求后,向客户端发送响应信息。HTTP默认端口号为80,但是你也可以改为8080或者其他端口。

通信流程说明:

①用户首先通过鼠标/键盘点击或手动输入目标链接(即URL(Uniform Resource Locators),中文名称:统一资源定位符),向HTTP客户端(如常见的浏览器)传达数据查询需求。
②HTTP客户端收到需求后,将收到的URL信息向DNS服务器(域名系统)询问链接对应的具体IP地址,DNS服务器返回URL对应的IP地址。
③HTTP客户端再拿着IP地址通过TCP协议(传输控制协议,Transmission Control Protocol)和IP协议(Internet Protocol)向HTTP服务器发出数据请求,等待服务器响应。
④HTTP服务器将请求的相关信息返回给HTTP客户端,由客户端返回给客户。
⑤重复上述步骤①~④,直到所有请求执行完毕。

URL格式: 如 scheme://hostname:port/path?querystring#fragment 。一个完整的URL共有6部分构成,但是并不是每个部分都一定要具备。参数解释如下:

HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。

如:

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

如:

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。HTTP1.0 定义了三种请求方法:GET, POST 和 HEAD方法。HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

在请求模式中,最常用的请求方法是GET和POST方法,在爬虫过程中至关重要。这两个方法都是从服务器请求一个资源,但是在正文的使用上有所不同。GET方法是网络请求最通用方法,可理解为直接请求。POST则有所区别,需要提交表单信息才能请求到信息,比如说拉勾网招聘首页需要用户输入地点、薪资范围等信息才能请求到匹配的网页界面。

HTTP请求头提供了关于请求,响应或者其他的发送实体的信息。下面将具体来介绍HTTP响应头信息。

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。HTTP状态码的英文为HTTP Status Code。下面是常见的HTTP状态码:

200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,比如text/html/xml/json/jpg/gif/pdf等。Content-Type 标头告诉客户端实际返回的内容的内容类型,如下图,返回的是html格式文件。

当我们在地址栏输入 www.sina.com.cn 时,浏览器将显示新浪的首页。在这个过程中,浏览器都干了哪些事情呢?通过Network的记录,我们就可以知道。在Network中,定位到第一条记录,点击右侧Headers,从Request Headers中可以看到浏览器发给新浪服务器的请求:请求网址为 https://www.sina.com.cn/ ,请求方法为GET.

继续往下找到Response Headers,它显示服务器返回的原始响应数据。其中200表示一个成功的响应,后面的OK是说明。失败的响应有404 Not Found:网页不存在,500 Internal Server Error:服务器内部出错,等等。Content-Type指示响应的内容,这里是text/html表示HTML网页。请注意,浏览器就是依靠Content-Type来判断响应的内容是网页还是图片,是视频还是音乐。

HTTP响应返回的是HTML源码,点击Response,可以看到返回的html网页源码。

接着,当浏览器读取到新浪首页的HTML源码后,它会解析HTML,显示页面,然后,根据HTML里面的各种链接,再发送HTTP请求给新浪服务器,拿到相应的图片、视频、Flash、javaScript脚本、CSS等各种资源,最终显示出一个完整的页面。

参考: https://www.runoob.com/http/http-tutorial.html

更多内容可关注公共号“YJY技能修炼”~~~

往期回顾
R爬虫在工作中的一点妙用
R爬虫必备基础——HTML和CSS初识
R爬虫必备基础——静态网页+动态网页
R爬虫必备——rvest包的使用
R爬虫必备基础——CSS+SelectorGadget
R爬虫必备基础—Chrome开发者工具(F12)

‘肆’ java客户端怎么往服务器端写请求

你是要自己写还是怎么的?要是自己写的话你直接把充服务器传过来的图片通过输出流输出到本地指定的地方就可以了。

‘伍’ 怎么向服务器手动发送SYN请求

浏览器通过IP向目标服务器发送请求。建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认。服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISH(TCP连接成功)状态,完成三次握手。

‘陆’ 客户端怎么使用httpclient向https服务器发送数据

客户端向服务器发送数据时,份两种情况,SSL单向验证和SSL双向验证

1.SSL单向验证时

代码如下:

Java代码
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class ClientSendData {
static Log log = LogFactory.getLog(ClientSendData.class);

private String Url;

// 初始化数据
public ClientSendData() {
Url = "https://test.yihaodian.com:8443/ims/feedbackToPingAn_getData.action";
}

public String sendData(String data) {
String receivedData = null;
try {

Map<String, String> paramsData = new HashMap<String, String>();
paramsData.put("data", data);
receivedData = send(Url, paramsData);
} catch (Exception e) {
e.printStackTrace();
}
return receivedData;
}

public static String send(String url, Map<String, String> paramsMap) {
String result = null;
PostMethod postMethod = null;
HttpClient httpClient = new HttpClient();

httpClient.getParams().setParameter(
HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");
postMethod = new PostMethod(url);

if (paramsMap != null && paramsMap.size() > 0) {
NameValuePair[] datas = new NameValuePair[paramsMap.size()];
int index = 0;
for (String key : paramsMap.keySet()) {
datas[index++] = new NameValuePair(key, paramsMap.get(key));
}
postMethod.setRequestBody(datas);

}

HttpClientParams httparams = new HttpClientParams();
httparams.setSoTimeout(60000);
postMethod.setParams(httparams);

try {
int statusCode = httpClient.executeMethod(postMethod);
if (statusCode == HttpStatus.SC_OK) {
result = postMethod.getResponseBodyAsString();
log.info("发送成功!");
} else {
log.error(" http response status is " + statusCode);
}

} catch (HttpException e) {
log.error("error url=" + url, e);
} catch (IOException e) {
log.error("error url=" + url, e);
} finally {
if (postMethod != null) {
postMethod.releaseConnection();
}
}

return result;
}

public static void main(String[] args) {
ClientSendData t = new ClientSendData();
t.sendData("测试SSL单项连接,向服务端发送数据!");
}
}

可能出现的异常

1.java.net.ConnectException: Connection refused: connect

服务器没有启动

2 .javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed

服务端的证书是不可信的。解决办法见这篇文章 http://zhuyuehua.iteye.com/blog/1102347

3.java.net.SocketException: Software caused connection abort: recv failed

这是由于服务端配置的是SSL双向认证,而客户端发送数据是按照服务器是单向认证时发送的,即没有将客户端证书信息一起发送给服务端。

4.org.apache.commons.httpclient.NoHttpResponseException

这一般是服务端防火墙的原因。拦截了客户端请求。

另外,当服务端负载过重时,也会出现此问题。

5.javax.net.ssl.SSLHandshakeException: Remote host closed connection ring handshake

这是由于服务端配置的是SSL双向认证,而客户端发送数据是按照服务器是单向认证时发送的,即没有将客户端证书信息一起发送给服务端。服务端验证客户端证书时,发现客户端没有证书,然后就断开了握手连接。

2.SSL双向验证时

双向验证时,暂时不知道如何用HTTPCLIENT发送数据,如需要双向验证时发送数据,参考我另外的文章。另外,有知道HTTPCLIENT如何在双向验证时发送数据的,恳请指教。

‘柒’ Web服务器的工作原理: 谈谈客户端如何向Web服务器提出请求,Web服务器怎样响应请求,提供服务

一般是
客户端发送http请求(tcp 80)到服务器端,tcp连接建立之后,通过http的动作get获得页面信息

具体不是一句两句能说明白的
自己抓包看吧

‘捌’ 推送消息有哪些实现方式

消息推送(Push)指运营人员通过自己的产品或第三方工具对用户移动设备进行的主动消息推送。推送消息有有5种实现方式,以下是实现的方式:
1、轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息,并关闭连接。
2、长轮询:客户端向服务器发送Ajax请求,服务器接到请求后Hold住连接,直到有新消息才返回响应信息,并关闭连接;客户端处理完响应信息后再向服务器发送新的请求。
3、长连接:在页面中嵌入一个隐藏的jframe,将这个隐藏的iframe的src属性设置为对一个长连接的请求或者采用XRH请求,服务器端就能源源不断地往客户端输入数据。
4、Flash Socket:在页面中嵌入一个使用了Socket类的Flash程序,JavaScript通过调用此Flash程序提供的Socket接口与服务器端的Socket接口进行通信,JavaScript在收到服务器端传送的信息后控制页面的显示。
5、WebSocket:WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术;依靠这种技术可以实现客户端和服务器端的长连接,双向实时通讯。
运用这些方式,可以做好消息推送。好的消息推送平台也是做好推送的重要一部分,极光JPush 是经过考验的大规模 App 推送平台,每天推送消息量级为数百亿条。 开发者集成 SDK 后,可以通过调用 API 推送消息。

阅读全文

与客户端如何向服务器发送请求相关的资料

热点内容
加油什么app划算 浏览:713
开服要什么样的服务器 浏览:33
pdf文件太大怎么压缩 浏览:29
UK开票显示文件夹不存在 浏览:668
无锡江苏大容量服务器公司云主机 浏览:503
pdf朱绍侯 浏览:227
编程猫算法求和 浏览:556
品茗监测不到加密锁 浏览:207
世界程序员收入 浏览:1000
filetypephp 浏览:726
铰刀转速进给的算法 浏览:979
php二维数组取一列 浏览:377
安装杀毒软件出现压缩或加密 浏览:975
方舟端游服务器怎么搜索房间 浏览:73
单片机学51好还是stm8好 浏览:798
手中的app如何隐藏 浏览:1001
安卓什么壁纸软件号 浏览:436
java设置内存大小 浏览:434
php循环匹配 浏览:325
技巧pdf 浏览:481