c語言http庫
25.2.2. C API函數概述
這里歸納了C API可使用的函數,並在下一節詳細介紹了它們。請參見25.2.3節,「C API函數描述」。
函數
描述
mysql_affected_rows()
返回上次UPDATE、DELETE或INSERT查詢更改/刪除/插入的行數。
mysql_autocommit()
切換 autocommit模式,ON/OFF
mysql_change_user()
更改打開連接上的用戶和資料庫。
mysql_charset_name()
返回用於連接的默認字元集的名稱。
mysql_close()
關閉伺服器連接。
mysql_commit()
提交事務。
mysql_connect()
連接到MySQL伺服器。該函數已不再被重視,使用mysql_real_connect()取代。
mysql_create_db()
創建資料庫。該函數已不再被重視,使用SQL語句CREATE DATABASE取而代之。
mysql_data_seek()
在查詢結果集中查找屬性行編號。
mysql_debug()
用給定的字元串執行DBUG_PUSH。
mysql_drop_db()
撤銷資料庫。該函數已不再被重視,使用SQL語句DROP DATABASE取而代之。
mysql_mp_debug_info()
讓伺服器將調試信息寫入日誌。
mysql_eof()
確定是否讀取了結果集的最後一行。該函數已不再被重視,可以使用mysql_errno()或mysql_error()取而代之。
mysql_errno()
返回上次調用的MySQL函數的錯誤編號。
mysql_error()
返回上次調用的MySQL函數的錯誤消息。
mysql_escape_string()
為了用在SQL語句中,對特殊字元進行轉義處理。
mysql_fetch_field()
返回下一個表欄位的類型。
mysql_fetch_field_direct()
給定欄位編號,返回表欄位的類型。
mysql_fetch_fields()
返回所有欄位結構的數組。
mysql_fetch_lengths()
返回當前行中所有列的長度。
mysql_fetch_row()
從結果集中獲取下一行
mysql_field_seek()
將列游標置於指定的列。
mysql_field_count()
返回上次執行語句的結果列的數目。
mysql_field_tell()
返回上次mysql_fetch_field()所使用欄位游標的位置。
mysql_free_result()
釋放結果集使用的內存。
mysql_get_client_info()
以字元串形式返回客戶端版本信息。
mysql_get_client_version()
以整數形式返回客戶端版本信息。
mysql_get_host_info()
返回描述連接的字元串。
mysql_get_server_version()
以整數形式返回伺服器的版本號。
mysql_get_proto_info()
返回連接所使用的協議版本。
mysql_get_server_info()
返回伺服器的版本號。
mysql_info()
返回關於最近所執行查詢的信息。
mysql_init()
獲取或初始化MYSQL結構。
mysql_insert_id()
返回上一個查詢為AUTO_INCREMENT列生成的ID。
mysql_kill()
殺死給定的線程。
mysql_library_end()
最終確定MySQL C API庫。
mysql_library_init()
初始化MySQL C API庫。
mysql_list_dbs()
返回與簡單正則表達式匹配的資料庫名稱。
mysql_list_fields()
返回與簡單正則表達式匹配的欄位名稱。
mysql_list_processes()
返回當前伺服器線程的列表。
mysql_list_tables()
返回與簡單正則表達式匹配的表名。
mysql_more_results()
檢查是否還存在其他結果。
mysql_next_result()
在多語句執行過程中返回/初始化下一個結果。
mysql_num_fields()
返回結果集中的列數。
mysql_num_rows()
返回結果集中的行數。
mysql_options()
為mysql_connect()設置連接選項。
mysql_ping()
檢查與伺服器的連接是否工作,如有必要重新連接。
mysql_query()
執行指定為「以Null終結的字元串」的SQL查詢。
mysql_real_connect()
連接到MySQL伺服器。
mysql_real_escape_string()
考慮到連接的當前字元集,為了在SQL語句中使用,對字元串中的特殊字元進行轉義處理。
mysql_real_query()
執行指定為計數字元串的SQL查詢。
mysql_refresh()
刷新或復位表和高速緩沖。
mysql_reload()
通知伺服器再次載入授權表。
mysql_rollback()
回滾事務。
mysql_row_seek()
使用從mysql_row_tell()返回的值,查找結果集中的行偏移。
mysql_row_tell()
返回行游標位置。
mysql_select_db()
選擇資料庫。
mysql_server_end()
最終確定嵌入式伺服器庫。
mysql_server_init()
初始化嵌入式伺服器庫。
mysql_set_server_option()
為連接設置選項(如多語句)。
mysql_sqlstate()
返回關於上一個錯誤的SQLSTATE錯誤代碼。
mysql_shutdown()
關閉資料庫伺服器。
mysql_stat()
以字元串形式返回伺服器狀態。
mysql_store_result()
檢索完整的結果集至客戶端。
mysql_thread_id()
返回當前線程ID。
mysql_thread_safe()
如果客戶端已編譯為線程安全的,返回1。
mysql_use_result()
初始化逐行的結果集檢索。
mysql_warning_count()
返回上一個SQL語句的告警數。 詳見:http://dev.mysql.com/doc/refman/5.1/zh/apis.html#c-api-function-overview
http://dev.mysql.com/doc/refman/5.0/en/c.html
② C語言,http報文,post請求,求大神詳解
URL要放在POST和HTTP/1.1之間,注意加空格。
URL好像不需要域名部分。
③ 如何使用c語言解析httppost請求
這個和具體的網頁有關系的,你可以用HttpWatch之類的抓包工具分析一個網頁的請求和返回。 然後就可以自己模仿相關的請求訪問該網頁了。
④ 用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);
⑤ 在linux下如何利用C語言實現HTTP的get和post方法
下載wget的源碼看看就知道了
⑥ windows環境下c語言支持ftp和http多線程下載的客戶端
下面的程序,編譯之後,你可以運行很多個實例,目前我將文件寫在了D:\1.txt,每個程序寫1000行數據,這些值你可以自己更改(比如 寫在C:,每個程序寫10000行等),等程序都寫完後,你可以去文件中查看寫文件的結果。補充一下,我是在VC6.0環境中寫的,所以windows.h,如果你不是在這個環境中的話,可能需要修改一些定義,比如DWORD等。其他的API都是windows平台提供的API;
#include <stdio.h>
#include "windows.h"
int main()
{
//獲取進程ID,因為你希望是多個進程運行同時寫一個文件,所以,我們列印出進程ID
DWORD dwProcessID = GetCurrentProcessId();
//初始化我們要寫入文件中的內容,及該內容長度;
char szContent[100] = ;
sprintf(szContent,"process[%u] write file\r\n",dwProcessID);
DWORD dwContentLen = strlen(szContent);
//創建互斥量,這樣可以進行進程間的互斥,當然用這個也可以做線程間的互斥
HANDLE hMutex = CreateMutex(NULL,FALSE,"MyFileMutex");
if (NULL == hMutex)
{
printf("[%u]Create/Open Mutex error!\r\n",dwProcessID);
return 1;
}
//創建或打開文件
HANDLE hFile = CreateFile("D:\\1.txt",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ,NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_ARCHIVE,
NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
printf("[%u]Creat/Open file error!\r\n",dwProcessID);
return 1;
}
//循環寫入文件
for(int i = 0; i < 1000 ; i++)
{
//等待臨界資源,即鎖定文件
WaitForSingleObject(hMutex,INFINITE);
printf("Process[%u] Get the signal\r\n",dwProcessID);
DWORD len = 0;
//因為是共享寫文件,即多個程序寫一個文件,所以一定要將文件指針偏移到尾部
SetFilePointer(hFile,0,NULL,FILE_END);
//寫入文件
BOOL rnt = WriteFile(hFile,szContent,dwContentLen,&len,NULL);
if (rnt == FALSE)
{
printf("Process[%u] Fail to write file\r\n",dwProcessID);
}
//釋放互斥量,解除鎖定
ReleaseMutex(hMutex);
//加個Sleep便於我們中間觀察結果
Sleep(30);
}
CloseHandle(hMutex);
CloseHandle(hFile);
return 0;
}
應你要求,我把AIP中的宏定義解釋如下:
HANDLE hFile = CreateFile("D:\\1.txt",
GENERIC_READ | GENERIC_WRITE,//表示程序對該文件有讀和寫的許可權
FILE_SHARE_WRITE | FILE_SHARE_READ,//表示可以多個程序共享讀和寫的許可權
NULL,
OPEN_ALWAYS,//表示打開該文件,如果該文件不存在,則創建該文件
FILE_ATTRIBUTE_ARCHIVE,//文件的屬性為存檔
NULL);
WaitForSingleObject(hMutex,INFINITE);
//INFINITE表示永遠等待,直到hMutex有信號為止
SetFilePointer(hFile,0,NULL,FILE_END);
//FILE_END表示從文件尾部開始偏移;實際此舉就是將文件指針偏移到文件尾部;
另外,虛機團上產品團購,超級便宜
⑦ 如何用c語言實現http ftp的上傳功能
hehe ..這是因為FTP跟HTTP根本不是同一種類型伺服器。FTP專門是用來下載上傳用的,可以算做一個網路硬碟吧..而HTTP伺服器一般是WEB伺服器..性質完全不一樣,就好象你家裡的廚房和廁所一樣,功能完全不一樣嘛你總不可能在廁所想做飯,在廚房想上廁所對不對,沒有任何辦法..你只能按最直接的地址下載
如果幫助到您,請記得採納為滿意答案哈,謝謝!祝您生活愉快! vae.la
⑧ 如何用c語言實現http伺服器
去看一下《Advanced Linux Programming》這本書吧,第11章講的就是怎麼用C語言實現一Http伺服器。 這里有下載地址(英文的): http://www.advancedlinuxprogramming.com/alp-folder 英文看起來不順的話可以上網找找有沒有中文版的這本書,應該叫Linux高級編程吧~~~參考資料: http://www.advancedlinuxprogramming.com/alp-folder
⑨ C語言實現HTTP post+XML.求助
網路一下 cURL 到其官網下載,有c源代碼,實現HTTP協議上傳下載等等
參考:
http://curl.haxx.se/
⑩ 如何用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();
}
}
}