导航:首页 > 解决方法 > 最简单的实现httpget方法

最简单的实现httpget方法

发布时间:2022-04-01 07:42:44

㈠ 用winsock实现http的get()

hostent * remoteHost;//hostnet是什么类型?
就是gethostbyname返回的类型,因为一个域名可能对应多个地址还有可能是不同类型的,所以需要一个比较复杂一点的返回类型

SendString(sock,"User-Agent: Mozilla/4.0"); 告诉服务器你是什么,这行基本上就是欺骗服务器说你是Netscape或者Firefox... 不过服务器一般不会理你这个

LPSTR 就是char *。chars是在计算你已经看了多少个字,虽然是囫囵个recv进来的,解析还是得一个字一个字解析。

如何针对http的get请求进行处理与响应

1、HTTP请求概述

在前面有一篇文章对HTTP协议有详细的描述,这里就不再过多的做说明,只是简单的作为这篇文章的引子。

HTTP协议又被称为超文本传输协议,它的的设计目的是保证客户机与服务器之间的通信。HTTP 的工作方式是客户端与服务器之间的请求-应答协议。在客户端和服务器之间进行请求-响应时,有两个最基本的请求方式:GET 和 POST。

其中,GET请求表示从指定的资源请求数据,POST请求表示向指定的资源提交要被处理的数据。

2、HTTP请求格式

在HTTP请求中,首先是请求行,注意这里的请求行一定要放在最前面;其次,是请求头,英文表示为header;然后会空一行,紧接着就可以是请求的具体内容了,一般称之为请求体,request-body。给出一个图示如下:

3、GET请求与POST请求对比

GET请求与POST请求有一些异同点,主要有以下几点问题:

(1)、GET请求和POST请求都是客户端与服务器之间交互,请求--应答模式的协议

(2)、GET请求是通过URL直接请求数据,数据信息可以在URL中直接看到,比如浏览器访问;而POST请求是放在请求头中的,我们是无法直接看到的;

(3)、GET提交有数据大小的限制,一般是不超过1024个字节,而这种说法也不完全准确,HTTP协议并没有设定URL字节长度的上限,而是浏
览器做了些处理,所以长度依据浏览器的不同有所不同;POST请求在HTTP协议中也没有做说明,一般来说是没有设置限制的,但是实际上浏览器也有默认
值。总体来说,少量的数据使用GET,大量的数据使用POST。

(4)、GET请求因为数据参数是暴露在URL中的,所以安全性比较低,比如密码是不能暴露的,就不能使用GET请求;POST请求中,请求参数信息是放在请求头的,所以安全性较高,可以使用。在实际中,涉及到登录操作的时候,尽量使用HTTPS请求,安全性更好。

下面给出一副图示,说明一下HTTP中GET与POST请求的差异:

4、使用步骤:

在Android中使用HTTP请求,主要步骤如下:

(1)、实例化一个HttpGet(或HttpPost)对象,将请求的URL地址通过构造方法传给HttpGet(或HttpPost)对象;
(2)、使用DefaultHttpClient类的execute方法发送GET或POST 请求,并返回HttpResponse对象;
(3)、通过HttpResponse接口的getEntity方法返回响应信息。

5、实例代码

给出一个在实际应用中的一个POST请求的代码片段:

[java] view plain print?
params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "Post方法"));
params.add(new BasicNameValuePair("param2", "第二个参数"));

try {
HttpPost post = new HttpPost(baseUrl);
post.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //将参数填入POST Entity中

HttpResponse response = httpClient.execute(post); //执行POST方法
resCode = response.getStatusLine().getStatusCode()); //获取响应码
result = EntityUtils.toString(response.getEntity(), "utf-8")); //获取响应内容

} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

6、HTTP请求状态码意义

HTTP请求中,主要有这样几个类型:1XX:表示信息提示,2XX:表示成功,3XX:表示重定向,4XX:表示客户端请求错误,5XX:表示服务器错误。常见的几个HTTP请求状态码意义如下:

200 OK: 找到了该资源,并且一切正常。
304 NOT MODIFIED: 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
401 UNAUTHORIZED: 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
403 FORBIDDEN: 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
404 NOT FOUND: 在指定的位置不存在所申请的资源。
505 NOT SUPPORTED:服务器不支持请求中所指明的HTTP版本

㈢ java 发送http get请求 有几种实现方式

  1. HttpUrlConnection

  2. HttpClient

㈣ 如何使用libcurl实现HTTP的GET方法获取文件长度

在项目中,需要做一个下载中间件,查看资料发现libcurl很适合,因此选用libcurl来实现HTTP下载功能。
用libcurl实现下载功能很方便,只要调用libcurl库的
在CODE上查看代码片派生到我的代码片
curl_easy_init()
curl_easy_setopt()
curl_easy_perform()
curl_easy_getinfo()
就可以完成http下载,并且libcurl教程很多,网上资料也很多。
对于libcurl获取文件长度,网上比较多的做法如下:
在CODE上查看代码片派生到我的代码片
long downloadFileLenth = 0;
CURL *handle = curl_easy_init();
curl_easy_setopt(handle, CURLOPT_URL, url);
curl_easy_setopt(handle, CURLOPT_HEADER, 1); //只要求header头
curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //不需求body
if (curl_easy_perform(handle) == CURLE_OK)
{
curl_easy_getinfo(handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &downloadFileLenth);
}
else {
downloadFileLenth = -1;
}
curl_easy_cleanup(handle);
但是这种做法,默认是通过HTTP的HEAD方式来获取的,但是并不是所有HTTP的服务器都是支持HEAD方式来获取,比如说本人项目中,
有个HTTP server就不支持HEAD方式,而只能使用GET方式来获取文件长度,所以这种方式不可行, 本希望能够使用如下代码段来实现:
在CODE上查看代码片派生到我的代码片
long downloadFileLenth = 0;
CURL *handle = curl_easy_init();
curl_easy_setopt(handle, CURLOPT_URL, url);
curl_easy_setopt(handle, CURLOPT_HTTPGET, 1); //使用HTTPGET
curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //不需求body
if (curl_easy_perform(handle) == CURLE_OK)
{
curl_easy_getinfo(handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &downloadFileLenth);
}
else {
downloadFileLenth = -1;
}
curl_easy_cleanup(handle);
但是发现还是用的HEAD方式获取,查看libcurl源代码发现,当设置CURLOPT_NOBODY,libcurl会默认设置获取方式为HEAD方式,如果把
set nobody的option去掉,又会下载文件内容!所以上面代码无法满足。
没办法只能看libcurl源代码,终于发现如下解决方案:
在CODE上查看代码片派生到我的代码片
long downloadFileLenth = 0;
CURL *handle = curl_easy_init();
curl_easy_setopt(handle, CURLOPT_URL, url);
curl_easy_setopt(handle, CURLOPT_CUSTOMREQUEST, “GET”); //使用CURLOPT_CUSTOMREQUEST
curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //不需求body
if (curl_easy_perform(handle) == CURLE_OK)
{
curl_easy_getinfo(handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &downloadFileLenth);
}
else {
downloadFileLenth = -1;
}
curl_easy_cleanup(handle);
可以完美解决用GET获取文件长度,而不下载文件内容。

㈤ shell脚本实现执行http的一个post或者get方法是怎么实现的吖

你好,可以通过curl和wget两个命令发送http请求:
一、get请求:
1、使用curl命令:
curl “http://www..com” 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
curl -i “http://www..com” 显示全部信息
curl -l “http://www..com” 只显示头部信息
curl -v “http://www..com” 显示get请求全过程解析
2、使用wget命令:
wget “http://www..com”也可以

二、post请求
1、使用curl命令(通过-d参数,把访问参数放在里面):
curl -d “param1=value1¶m2=value2” “http://www..com”
2、使用wget命令:(--post-data参数来实现)
wget --post-data ‘user=foo&password=bar’ http://www..com
以上就是Linux模拟Http的get或post请求的方法了,这样一来Linux系统也能向远程服务器发送消息了。

示例:wget --post-data="" http://mcs-inner.99bill.com/mcs-gateway/mcs/task/clear

三、curl (可直接发送格式化请求例如json)
示例:目标url:http://fsc-inner.99bill.com/acs/deposit/{srcRef}
命令:curl -H "Content-type: application/json" -X POST -d '{"srcRef":"1002"}'http://fsc-inner.99bill.com/acs/deposit/1002

㈥ 怎么发送HTTP get请求

请参照下面的例子:

/*URL可以随意改*/

String uriAPI = "http://192.168.1.100:8080/test/test.jsp?u=wangyi&p=456";

/*建立HTTP Get对象*/

HttpGet httpRequest = new HttpGet(uriAPI);

try

{

/*发送请求并等待响应*/

HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);

/*若状态码为200 ok*/

if(httpResponse.getStatusLine().getStatusCode() == 200)

{

/*读*/

String strResult = EntityUtils.toString(httpResponse.getEntity());

/*去没有用的字符*/

strResult = eregi_replace("( | | | )","",strResult);

mTextView1.setText(strResult);

}

else

{

mTextView1.setText("Error Response: "+httpResponse.getStatusLine().toString());

}

}

catch (ClientProtocolException e)

{

mTextView1.setText(e.getMessage().toString());

e.printStackTrace();

}

catch (IOException e)

{

mTextView1.setText(e.getMessage().toString());

e.printStackTrace();

}

catch (Exception e)

{

mTextView1.setText(e.getMessage().toString());

e.printStackTrace();

}

㈦ 利用多线程实现一个简单的支持get方式的http服务器 求求大哥大姐一定帮忙啊。一定快点帮忙啊

Option Explicit

Public Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
Public Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long

Public id As Long

Public Function AddText()
Do
Form1.Text1.Text = "Adding to Text1 - "
doevents
Loop
End Function

Option Explicit

Private Sub Command1_Click()
id = CreateThread(ByVal 0&, ByVal 0&, AddressOf AddText, ByVal 0&, 0, id)
End Sub

Private Sub Command2_Click()
Call TerminateThread(id, ByVal 0&)
End Sub

//PS 请注意里面所用到的控件...
我可以帮助你,你先设置我最佳答案后,我网络Hii教你。你的串号我已经记下,采纳后我会帮你制作

㈧ 请简单介绍http请求的get方法和post方法各有什么优缺点

1、GET允许提交的数据大小比POST要小得多,这个大小与浏览器和服务器有关,GET大概只能提交1KB;POST允许提交的数据大小只与服务器有关,默认可以提交2MB,也可以通过设置服务器来改变这个值。
2、POST的安全性要比GET的安全性高一点点。主要表现为GET传递的信息直接显示在url中,而POST传递的信息在后台进行,但是也可以利用软件获取到。

㈨ HTTP的GET请求方法

AUTO_ZOOM 模式下,显示的图像大小自动适应控件窗口大小。
AUTO_SIZE 模式下,这个控件的尺寸等于图像尺寸乘以缩放因子。

阅读全文

与最简单的实现httpget方法相关的资料

热点内容
控制器参数的工程整定方法有哪些 浏览:668
嘌呤片计算方法 浏览:271
室内隔热条的安装方法 浏览:542
紫草油宝宝使用方法 浏览:292
沙漠空气取水方法图片 浏览:384
治疗香港脚的方法 浏览:270
郑强教学方法有哪些 浏览:196
研究方法中的测验 浏览:652
党校开展课题研究的方法 浏览:969
ecco护理剂使用方法 浏览:242
枣庄女人月经不调治疗方法 浏览:750
除螨最快方法图片 浏览:561
如何用简单的方法拆手机 浏览:95
检测抗红细胞抗体方法 浏览:604
打印机缓存文件夹在哪里设置方法 浏览:765
食用营养膏使用方法 浏览:521
经测定蛋白质含量的方法有哪些 浏览:934
苹果输入法的声音怎么设置在哪里设置方法 浏览:348
找到简单的方法英语 浏览:525
水的洁治常用的方法有哪些 浏览:905