标签归档:http

小菜瞎搞HTTP–简单GET请求

//
//  main.c
//
//  Created by qixingyue on 13-7-19.
//  Copyright (c) 2013年 qixingyue. All rights reserved.
//

#include <stdio.h>
#include <unistd.h>
#include <string.h>

//socket 程序需要的头文件
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc, const char * argv[])
{
    if(argc != 5 ) {
        printf("Error Happend. Params not enough.\n");
        return 1;
    }
    
    printf("Get FILE:%s from %s User: %s , Passowrd : %s",argv[4],argv[1],argv[2],argv[3]);
    
    int client_socket ;
    char buffer[1000];
    
    if((client_socket = socket(AF_INET, SOCK_STREAM, 0))<0) {
        printf("Socket create error . \n");
        return 1;
    }
    
    struct sockaddr_in serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port =  htons(80) ;
    serverAddr.sin_addr.s_addr = inet_addr(argv[1]);
    
    if(connect(client_socket, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0 ) {
        printf("Connect Error:\n");
        return 1;
    }
    
    
    char *first_line = "GET / HTTP/1.1\n";
    char *second_line = "Host: itianmen.com\n";
    send(client_socket, first_line,strlen(first_line),0);
    send(client_socket, second_line,strlen(second_line),0);
    send(client_socket, "\n", 1,0);
    
    while(recv(client_socket, buffer, 1000, 0) >0 ){
        printf("GET MESSAGE : %s \n",buffer);
    }
    
    close(client_socket);
    return 0;
}

两个PHP函数–全局变量封装和http验证

_G将所有的全局变量封闭到一个变量内部,便于控制和处理。将设置和取值融合到一个函数中。

/**
 * 全局变量的封存
 */
if(!function_exists('_G')) {
	
	function _G($name,$value = NULL){
		
		if(!isset($GLOBALS['SOCKET_G'])) {
			$GLOBALS['SOCKET_G'] = array();
		} 
		
		static 	$G ;
		$G = $GLOBALS['SOCKET_G'];
		
		if ($value == NULL) { 
			return isset($G[$name]) ? $G[$name] : NULL;
		} else {
			$G[$name] = $value;
			$GLOBALS['SOCKET_G'] = $G;
		}
	}
	
}

http验证,简单的输入用户名密码,可以灵活的修改,只需要修改传递到函数的参数就可以了!

/**
 * 简单的http验证
 * @param string $msg 提示信息
 * @param string $u 验证用的用户名
 * @param string $pwd 验证用的密码
 */
function httpauthen($msg,$u = "admin",$pwd="admin"){

	if(!isset($_SERVER['PHP_AUTH_USER'])) {
		header('WWW-Authenticate: Basic realm="'.$msg.'"');
		header('HTTP/1.0 401 Unauthorized');
		exit();
	} else {
		if($_SERVER['PHP_AUTH_USER'] == $u && $_SERVER['PHP_AUTH_PW'] == $pwd ) {
			return ;
		}else {
			header('WWW-Authenticate: Basic realm="'.$msg.'"');
			header('HTTP/1.0 401 Unauthorized');
			exit();
		}
	}

}

常见的HTTP 1.1状态代码以及它们对应的状态信息和含义

应当谨慎地使用那些只有HTTP 1.1支持的状态代码,因为许多浏览器还只能够支持HTTP 1.0。如果你使用了HTTP 1.1特有的状态代码,最好能够检查一下请求的HTTP版本号(通过HttpServletRequest的getProtocol方法)。 状态代码 状态信息 含义
•100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)
•101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)
•200 OK 一切正常,对GET和POST请求的应答文档跟在后面。如果不用setStatus设置状态代码,Servlet默认使用202状态代码。
•201 Created 服务器已经创建了文档,Location头给出了它的URL。
•202 Accepted 已经接受请求,但处理尚未完成。
•203 Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。
•204 No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。
•205 Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。 继续阅读