На главную страницу
Форум txt.version   




Статья :: POST запрос url decode

[Motta data fra <FORM> med POST]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAKS_VARIABLE 20

/* Konvertere hex streng til riktig tegn */
char HexTilTegn(char *Hex)
{
char Tegn;

Tegn= (Hex[0]>='A' ? ((Hex[0]&0xdf)-'A')+10 : (Hex[0]-'0'));
Tegn*=16;
Tegn+=(Hex[1]>='A' ? ((Hex[1]&0xdf)-'A')+10 : (Hex[1]-'0'));
return(Tegn);
}

/* Redusere alle %xx til ett tegn */
char *Dekode(char *Streng)
{
int i,j;

for(i=0,j=0; Streng[j]; ++i,++j)
{ Streng[i]=Streng[j];
if(Streng[i]=='%')
{ Streng[i] = HexTilTegn(&Streng[j+1]);
j+=2; } }
Streng[i]='\0';
return(Streng);
}

/* Sette opp liste med variabelnavn og verdier */
char **HenteCgi(void)
{
int AntallBytes,i,AntallPar;
char *Buffer;
char *Strengpeker;
char **ParListe;
char **CgiListe;

/* Kontrollere at ting er som de skal */
if(strcmp(getenv("REQUEST_METHOD"),"POST"))
{ printf("Feil metode\n");
exit(1); }

/* Allokere plass til inndata */
if(!(AntallBytes=atoi(getenv("CONTENT_LENGTH"))))
{ printf("Ingen inndata\n");
exit(1); }
if(!(Buffer=(char*)malloc(AntallBytes+1)))
{ printf("Allokeringsfeil\n");
exit(1); }

/* Lese fra STDIN til allokert plass */
if(!fread(Buffer,AntallBytes,1,stdin))
{ printf("Inndata feil\n");
exit(1); }
Buffer[AntallBytes]='\0';

/* Endre plusser til mellomrom */
for(i=0; Buffer[i]; i++)
if(Buffer[i]=='+')
Buffer[i] =' ';

/* Splitte ved '&' tegn */
ParListe=(char**) malloc(MAKS_VARIABLE*sizeof(char**));
AntallPar=0;
Strengpeker=strtok(Buffer,"&");
while(Strengpeker!=NULL)
{ ParListe[AntallPar++]=strdup(Strengpeker);
Strengpeker=strtok(NULL,"&"); }
ParListe[AntallPar]=NULL; /* NULL-terminere liste */

/* Splitte igjen ved '=' tegn */
CgiListe=(char**) malloc((AntallPar*2+1)*sizeof(char**));
for(i=0; i<AntallPar; i++)
{ Strengpeker=strchr(ParListe[i],'=');
if(Strengpeker!=NULL)
{ *Strengpeker='\0';
CgiListe[i*2+1]=Dekode(strdup(Strengpeker+1)); }
else
CgiListe[i*2+1]=Dekode(strdup(""));
CgiListe[i*2]=strdup(ParListe[i]); }
CgiListe[AntallPar*2]=NULL; /* NULL-terminere liste */

/* Deallokere det vi ikke trenger og returnere */
for(i=0; ParListe[i]; i++) free(ParListe[i]);
free(ParListe);
free(Buffer);
return(CgiListe);
}

int main(void)
{
int i;
char **CgiListe;

/* Fortelle nettleser hva dette er */
printf("content-type: text/html\n\n");
printf("<html><body>\n");

/* Vise og deallokere variabelnavn og verdier */
CgiListe=HenteCgi();
for(i=0; CgiListe[i]; i++)
{ printf("%i: %s<br>\n",i,CgiListe[i]);
free(CgiListe[i]); }

/* Deallokere CgiListe og avslutte */
free(CgiListe);
printf("</body></html>");
fflush(stdout);
return 0;
}

POST запрос url decode

страницы в данном разделе 
 Using Assembly Language in Linux.  "Разрешение монитора" выворачиваем на изнанку
 Активный сервер Web: расширения CGI  Скопировать файл построчно
 Побайтное копирование файла  HTML Encyclopaedia
 Первая программка  показывает данные принятые от GET запроса
 Выводит случайную картинку  Примеры небольших программ
 Записывает в файл Host, REMOTE_HOST, HTTP_USER_AGENT и выводит картинку  Программа, совмещающая команды mv и cp.
 POST запрос url decode  Выводит QUERY_STRING
 Показывает переменные окружения сервера  Показывает время на сервере
 Изменение размера файла  Surveys Online!
 URL DECODE  Перенаправляет в зависимости от юзер агента
 Показывает юзер агент и хост   


Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)

Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)

PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C





 
©  programming-lang.com  справочник программиста