从请求报文的返回包里获取目标关键字的内容

本文探讨如何从HTTP请求响应报文中提取特定关键字,详细解析报文结构,讲解关键步骤和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>  
#include <stdlib.h>  
#include "curl.h"

static size_t write_data(void *ptr, size_t size, size_t nmemb, void *param)  
{  
    return size * nmemb;  
}  
  
static size_t head_data(char *ptr, size_t size, size_t nmemb, void *param)  
{  
	//printf("%s\r\n",ptr);
	char buff[512] = {0};
	char * pketword = "Content-Length: ";
	int i = 0;

	if(NULL == ptr)
	{
		printf("packet read error! \r\n");
		return size * nmemb; 
	}
    while((ptr[i] == pketword[i])&&(ptr[i] != ' '))       
    {       
        i++;   
    }  
    if(ptr[i] == pketword[i])  
	{
		//sscanf( (char*)ptr, "%*s%[^\r]", buff );//%s遇空格停止,加*则是忽略第一个读到的字符串
		sscanf((char*)ptr, "%*[^ ] %[^\r\n]", buff);//第一段到空格结束前的内容都忽略掉,第二段从空格开始换行结束
		printf("Size=%s\r\n",buff);
		return 0;
	}
	else
	{
		return size * nmemb;  
	}
}

void * http_get() 
{
    CURL *curl;//定义CURL类型的指针  
    CURLcode res; //定义CURLcode类型的变量  
  
    curl = curl_easy_init();//初始化一个CURL类型的指针   
  
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);//这里打开libcurl打印所有调试信息  
      
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);  
    //CURLOPT_NOBODY只下报文头,不包括数据.但是这里默认是head命令,注释掉,则是GET命令  
    curl_easy_setopt(curl, CURLOPT_NOBODY, 1);  
  
    curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);   
  
    curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, head_data);  
  
    //让用户指定url. Defaultport中存放的命令行传进来的网址  
    curl_easy_setopt(curl, CURLOPT_URL, "http://10.27.82.103/test.txt");  
      
    //传输时间 (ms)   
    curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, 100);
  
    //设置端口
    curl_easy_setopt(curl, CURLOPT_PORT, 80);  
  
	res = curl_easy_perform(curl);

    //清除curl操作.  
    curl_easy_cleanup(curl);  
  
    return NULL;  
}

int main()
{
	CURLcode res;

	res = curl_global_init(CURL_GLOBAL_ALL);  
    if (res != CURLE_OK)  
    {  
        printf( "Failed to global init default [%d]\n", res );  
        return 1;  
    }

	http_get();
}


 

在Java中,当你通过网络发送HTTP请求获取响应(通常称为Response)时,服务器会返回一个包含状态码、消息头以及正文的数据包。下面是一个简单的示例,展示了如何使用常见的`java.net.HttpURLConnection`或者第三方库如`org.apache.http.client`处理这样的请求: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class ResponseExample { public static void main(String[] args) throws Exception { URL url = new URL("http://example.com/api"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置请求方法和必要的头部信息(如果有的话) connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "application/json"); int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode); BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder responseBuilder = new StringBuilder(); while ((inputLine = in.readLine()) != null) { responseBuilder.append(inputLine); } in.close(); // 获取到整个报文内容 String responseBody = responseBuilder.toString(); System.out.println("Response Body:\n" + responseBody); // 根据需要解析响应内容,例如JSON或XML等 // ... connection.disconnect(); // 关闭连接 } } ``` 在这个例子中,`responseCode`表示HTTP响应的状态码,而`responseBody`则是实际的报文内容。你可以根据需要解析这个报文,比如检查状态码是否成功(200),或者对JSON数据进行解构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值