當前位置:首頁 » 密碼管理 » c語言訪問http

c語言訪問http

發布時間: 2024-05-05 20:04:14

1. c語言實現的http請求中,User-Agent該填什麼

User Agent表示的是客戶端軟體類型,也就是瀏覽器類型

2. 如何用c語言實現http伺服器

去看一下《Advanced linux Programming》這本書吧,第11章講的就是怎麼用C語言實現一Http伺服器。 這里有下載地址(英文的): http://www.advancedlinuxprogramming.com/alp-folder 英文看起來不順的話可以上網找找有沒有中文版的這本書,應該叫Linux高級編程吧~~~參考資料: http://www.advancedlinuxprogramming.com/alp-folder

3. 如何用c語言實現基於http的webservice

package com.yun.test;
import java.rmi.RemoteException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.message.PrefixedQName;
import org.apache.axis.message.SOAPHeaderElement;
import com.cezanne.golden.user.Exception;
import com.cezanne.golden.user.UserManagerServiceProxy;
import javax.xml.namespace.QName;
import java.net.MalformedURLException;
import javax.xml.rpc.ServiceException;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPException;
public class testWebService {
public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException
{
//標識Web Service的具體路徑
String endpoint = "WebService服務地址";
// 創建 Service實例
Service service = new Service();
// 通過Service實例創建Call的實例
Call call = (Call) service.createCall();
//將Web Service的服務路徑加入到call實例之中.
call.setTargetEndpointAddress( new java.net.URL(endpoint) );//為Call設置服務的位置
// 由於需要認證,故需要設置調用的SOAP頭信息。
Name headerName = new PrefixedQName( new QName("發布的wsdl里的targetNamespace里的url", "string_itemName") );
org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName);
header.addTextNode( "blablabla" );
call.addHeader(header);

// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("發布的wsdl里的targetNamespace里的url", "SoapHeader");
// soapHeaderElement.setNamespaceURI("發布的wsdl里的targetNamespace里的url");
// try
// {
// soapHeaderElement.addChildElement("string_itemName").setValue("blablabla");
// }
// catch (SOAPException e)
// {
// e.printStackTrace();
// }
// call.addHeader(soapHeaderElement);
//調用Web Service的方法
org.apache.axis.description.OperationDesc oper;
org.apache.axis.description.ParameterDesc param;
oper = new org.apache.axis.description.OperationDesc();
oper.setName("opName");
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg0"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg1"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg2"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
oper.setReturnType(new javax.xml.namespace.QName(", "string"));
oper.setReturnClass(java.lang.String.class);
oper.setReturnQName(new javax.xml.namespace.QName("", "return"));
oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
oper.setUse(org.apache.axis.constants.Use.LITERAL);
oper.addFault(new org.apache.axis.description.FaultDesc(
new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "Exception"),
"Exception",
new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "Exception"),
true
));
call.setOperation( oper );
call.setOperationName(new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "opName"));
//調用Web Service,傳入參數
String res = ( String ) call.invoke( new Object[]("arg0","arg1"));
System.out.println("===============");
return res;
}
/**
* @param args
*/
public static void main(String[] args) {
try {
System.out.println(getResult());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
} catch (SOAPException e) {
e.printStackTrace();
}
}
}

4. 我想編寫一個簡單的C語言或python http伺服器(高懸賞,255)

前端代碼template/index.html:

<!DOCTYPEhtml>

<htmllang="en">

<head>

<metacharset="UTF-8">

<title>Ajax示例</title>

</head>

<body>

<div><p>發送到伺服器的消息:</p></div>

<div><inputid="message"type="text"></div>

<div><buttontype="button"onclick="submit()">發送</button></div>

<div><p>來自伺服器的消息:</p></div>

<div><p><spanid="response"style="color:lawngreen;"></span></p></div>

</body>

<scriptsrc="

<script>

functionsubmit(){

constmessage=$("#message").val();

$.ajax({

url:"/message",

type:"post",

data:JSON.stringify({"message":message}),

contentType:"application/json",

dataType:"json",

success:(data)=>{

$("#response").text(data.response);

}

})

}

</script>

</html>


Pythonflask代碼app.py:

fromflaskimportFlask,request,render_template


app=Flask(__name__)


@app.route('/')

defindex():

returnrender_template('index.html')


@app.route('/message',methods=['POST'])

defmessage():

data=request.json

return{'response':'客戶端說「%s」'%data['message']}


if__name__=="__main__":

app.run()

5. 設計一個linux c語言,Http協議的伺服器,用socket收發消息,簡單點,求代碼and注釋。

OK
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>
#include <string.h>

int main(int argc,char *argv[])
{
int sockfd,new_socket;
int sock_value;
char buf[] = "hello! China!I Love You\n";

struct sockaddr_in client_;
struct sockaddr_in server_;

int SIZE = sizeof(struct sockaddr_in);

if(argc != 2){
fprintf(stderr,"The two number!\n");
exit(1);
}

if((sock_value = atoi(argv[1])) < 0){
fprintf(stderr,"socket error!\n");
exit(1);
}

if((sockfd = socket(PF_INET,SOCK_STREAM, 0)) == -1){
perror("socket");
exit(1);
}

bzero(&server_,SIZE);

server_.sin_family = PF_INET;
server_.sin_port = htons(sock_value);
server_.sin_addr.s_addr = INADDR_ANY;

if(bind(sockfd,(struct sockaddr *)(&server_),SIZE) == -1){
perror("bind");
exit(1);
}

if(listen(sockfd, 12) == -1){
perror("listen");
exit(1);
}

printf("Waiting ... ...\n");

while(1){
if((new_socket = accept(sockfd,(struct sockaddr *)(&client_),&SIZE)) == -1){
perror("accept");
exit(1);
}

printf("The client IP is %s\n",inet_ntoa(client_.sin_addr));
printf("The socket is %d\n",ntohs(client_.sin_port));

if(write(new_socket,buf,strlen(buf)) == -1){
perror("write");
exit(1);
}

int my;
char mybuf[1024];

if((my = read(new_socket, mybuf,1024)) == -1){
perror("read");
exit(1);
}

mybuf[my] = '\0';
printf("#++++#++++#:%s\n",mybuf);

close(new_socket);

}

close(sockfd);

return 0;
}

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>

int main(int argc,char *argv[])
{
int sockfd;
int sock_value;
char buf[1024];
char mybuf[] = "Linux\n";
int read_count;

struct sockaddr_in client_;
struct sockaddr_in server_;

int SIZE = sizeof(struct sockaddr_in);

if(argc != 3){
fprintf(stderr,"The two number!\n");
exit(1);
}

if((sock_value = atoi(argv[2])) < 0){
fprintf(stderr,"socket error!\n");
exit(1);
}

if((sockfd = socket(PF_INET,SOCK_STREAM, 0)) == -1){
perror("socket");
exit(1);
}

bzero(&client_,SIZE);
bzero(&server_,SIZE);

client_.sin_family = PF_INET;
client_.sin_port = htons(52252);
client_.sin_addr.s_addr = INADDR_ANY;

server_.sin_family = PF_INET;
server_.sin_port = htons(sock_value);
server_.sin_addr.s_addr = inet_addr(argv[1]);

if(connect(sockfd,(struct sockaddr *)(&server_),SIZE) == -1){
perror("connect");
exit(1);
}

if((read_count = read(sockfd,buf,1024)) == -1){
perror("read");
exit(1);
}

buf[read_count] = '\0';
printf("#----#----#:%s\n",buf);

if(write(sockfd, mybuf,6) == -1){
perror("write");
exit(1);
}

close(sockfd);

exit(0);

return 0;
}

6. 怎麼通過C語言讀取網頁裡面的數據

簡單的請求格式

GET /index.php HTTP/1.0
host:www.zixue7.com

當我們和伺服器連接上之後,發送上面的數據過去,伺服器就會返回 index.php 這個頁面給我們。

GET 這個 是表示 以什麼方式請求,HTTP中還有很多其他的請求方式,常用的就 GET POST (更詳細的 可以點開上面 http協議 那個鏈接)

GET 後面緊跟一個空格 然後 給出,要獲取的資源的名稱, /index.php 就表示獲取網站伺服器根目錄下 index.php 執行後所產生的內容,我們也可以改成 GET / HTTP/1.0 這就表示獲取默認首頁的內容 。 GET /1.html HTTP/1.0 就是獲取 伺服器根目錄下 1.html的內容,很容易理解吧。

接下來隔一個空格 跟上 HTTP/1.0 表示 http協議的版本,這個是固定的 。

第二行 host:www.zixue7.com 用來指定 訪問哪個主機。 大家都知道,一個伺服器可以放很多個網站,每個網站有不同的域名,所以我們需要用這個host來指定 我們要訪問的是哪個網站,這樣 才能正確得訪問到我們想訪問的網站。

第一步,連接伺服器。
第二步,按照http協議,發送請求數據,然後就是接受返回的內容。

沒錯,就這么簡單。

在編寫程序之前,我們先用一個小工具來模擬一下這個過程,好讓我們對http協議了解更深入一些。

telnet工具 如果是 win7下的朋友 猛戳這里-->win7開啟telnet功能

到此為止,我假設大家電腦上已經開啟了 telnet功能,正題開始。

telnet 他是一個基於tcp/ip 協議的程序,為我們用戶提供一個 與其他電腦通信的工具,我們可以使用他來和其他電腦進行連接通信。

開始->運行->輸入telnet回車, 出現一個黑框如下。

我們這時就可以輸入命令,來連接遠程主機,比如我們這次是要連接我們自學去論壇 的伺服器,
那麼我們就輸入 open www.zixue7.com 80 然後回車。

open 是打開的意思 後面跟上 要打開那個主機 然後 後面跟上埠, web伺服器默認使用的是80埠,所以 要加上80埠(不加埠 telnet默認是23埠)。

然後會出現下圖的情況,這時候 我們就可以輸入命令了,輸入的命令都將被發送到自學去論壇的伺服器上面。大家注意一下 下圖紅色箭頭所指出的部分,那裡就是一個輸入游標,不用管其他的字。

這就代表 我們已經和遠程主機連接上了,就相當於我們上節課中 客戶端執行到 connect 函數 之後 就是要調用 send函數發送數據了,在這里 我們只需要按鍵盤輸入到黑色窗口中 就會發送到服務端。

我們依次輸入以下內容,(注意,不能按退格,輸入錯誤了,就重新打開telnet,重新操作。)

7. 用c語言寫一個http頭文件查找函數。

#include <stdio.h>

char * xxx(char *all, char *target){
int i,j,k;
static char t[80];
j = strlen(all);
k = strlen(target);
printf("j=%d k=%d\n",j,k);
for (i=0;i<j-k-1;i++){
if (strncmp(&all[i],target,k)==0) { sscanf( &all[i+k+1],"%s",t);
printf("t = %s\n",t);
break;}
}
return t;
}

main(){
char all[]="GET / HTTP/1.1 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Sec-WebSocket-Key: mHCYmHhGCn44x+g6quuzYg== Cache-Control: no-cache";
char txt[]="Sec-WebSocket-Key:";
char trs[80];
printf("%s",xxx(all,txt));
}
---------
注意 char all[]=" ...." ; 寫在1行,或通過文件讀入。
char txt[]="Sec-WebSocket-Key:"; 字元串里的冒號不要漏掉,
若不寫冒號,計算sscanf位置 時要再加1。sscanf( &all[i+k+2],"%s",t);

8. C語言建立TCP連接後,怎麼發送HTTP的GET請求

send發送請求串 回車 再回車。 一行結束後 換另一個語句 最後要有一個空行
GET ***** 回車
回車

熱點內容
雲隙伺服器下載 發布:2024-05-19 04:33:22 瀏覽:312
德國C語言 發布:2024-05-19 04:13:40 瀏覽:959
音頻管理器沒有文件夾 發布:2024-05-19 04:13:36 瀏覽:666
qq郵箱埠993伺服器怎麼填 發布:2024-05-19 04:07:05 瀏覽:202
javaapi框架 發布:2024-05-19 04:06:59 瀏覽:359
與存儲結構無關的術語 發布:2024-05-19 04:05:41 瀏覽:499
編譯路由器固件選擇 發布:2024-05-19 03:56:28 瀏覽:39
手機f加密 發布:2024-05-19 03:28:47 瀏覽:225
用什麼密碼寫日記 發布:2024-05-19 03:27:57 瀏覽:303
資料庫access2003 發布:2024-05-19 02:49:39 瀏覽:620