⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gethttps.cpp

📁 开源的ssl算法openssl,版本0.9.8H
💻 CPP
字号:
/* *	An demo illustrating how to retrieve a URI from a secure HTTP server. * *	Author: 	Roy Wood *	Date:		September 7, 1999 *	Comments:	This relies heavily on my MacSockets library. *				This project is also set up so that it expects the OpenSSL source folder (0.9.4 as I write this) *				to live in a folder called "OpenSSL-0.9.4" in this project's parent folder.  For example: * *					Macintosh HD: *						Development: *							OpenSSL-0.9.4: *								(OpenSSL sources here) *							OpenSSL Example: *								(OpenSSL example junk here) * * *				Also-- before attempting to compile this, make sure the aliases in "OpenSSL-0.9.4:include:openssl"  *				are installed!  Use the AppleScript applet in the "openssl-0.9.4" folder to do this! *//* modified to seed the PRNG *//* modified to use CRandomizer for seeding *///	Include some funky libs I've developed over time#include "CPStringUtils.hpp"#include "ErrorHandling.hpp"#include "MacSocket.h"#include "Randomizer.h"//	We use the OpenSSL implementation of SSL....//	This was a lot of work to finally get going, though you wouldn't know it by the results!#include <openssl/ssl.h>#include <openssl/err.h>#include <timer.h>//	Let's try grabbing some data from here:#define kHTTPS_DNS		"www.apache-ssl.org"#define kHTTPS_Port		443#define kHTTPS_URI		"/"//	Forward-declare thisOSErr MyMacSocket_IdleWaitCallback(void *inUserRefPtr);//	My idle-wait callback.  Doesn't do much, does it?  Silly cooperative multitasking.OSErr MyMacSocket_IdleWaitCallback(void *inUserRefPtr){#pragma unused(inUserRefPtr)EventRecord		theEvent;	::EventAvail(everyEvent,&theEvent);		CRandomizer *randomizer = (CRandomizer*)inUserRefPtr;	if (randomizer)		randomizer->PeriodicAction();	return(noErr);}//	Finally!void main(void){	OSErr				errCode;	int					theSocket = -1;	int					theTimeout = 30;	SSL_CTX				*ssl_ctx = nil;	SSL					*ssl = nil;	char				tempString[256];	UnsignedWide		microTickCount;	CRandomizer randomizer;		printf("OpenSSL Demo by Roy Wood, roy@centricsystems.ca\n\n");		BailIfError(errCode = MacSocket_Startup());	//	Create a socket-like object		BailIfError(errCode = MacSocket_socket(&theSocket,false,theTimeout * 60,MyMacSocket_IdleWaitCallback,&randomizer));		//	Set up the connect string and try to connect		CopyCStrAndInsertCStrLongIntIntoCStr("%s:%ld",kHTTPS_DNS,kHTTPS_Port,tempString,sizeof(tempString));		printf("Connecting to %s....\n",tempString);	BailIfError(errCode = MacSocket_connect(theSocket,tempString));			//	Init SSL stuff		SSL_load_error_strings();		SSLeay_add_ssl_algorithms();			//	Pick the SSL method	//	ssl_ctx = SSL_CTX_new(SSLv2_client_method());	ssl_ctx = SSL_CTX_new(SSLv23_client_method());//	ssl_ctx = SSL_CTX_new(SSLv3_client_method());				//	Create an SSL thingey and try to negotiate the connection		ssl = SSL_new(ssl_ctx);		SSL_set_fd(ssl,theSocket);		errCode = SSL_connect(ssl);		if (errCode < 0)	{		SetErrorMessageAndLongIntAndBail("OpenSSL: Can't initiate SSL connection, SSL_connect() = ",errCode);	}		//	Request the URI from the host		CopyCStrToCStr("GET ",tempString,sizeof(tempString));	ConcatCStrToCStr(kHTTPS_URI,tempString,sizeof(tempString));	ConcatCStrToCStr(" HTTP/1.0\r\n\r\n",tempString,sizeof(tempString));		errCode = SSL_write(ssl,tempString,CStrLength(tempString));		if (errCode < 0)	{		SetErrorMessageAndLongIntAndBail("OpenSSL: Error writing data via ssl, SSL_write() = ",errCode);	}		for (;;)	{	char	tempString[256];	int		bytesRead;				//	Read some bytes and dump them to the console				bytesRead = SSL_read(ssl,tempString,sizeof(tempString) - 1);				if (bytesRead == 0 && MacSocket_RemoteEndIsClosing(theSocket))		{			break;		}				else if (bytesRead < 0)		{			SetErrorMessageAndLongIntAndBail("OpenSSL: Error reading data via ssl, SSL_read() = ",bytesRead);		}						tempString[bytesRead] = '\0';				printf("%s", tempString);	}		printf("\n\n\n");		//	All done!		errCode = noErr;		EXITPOINT:	//	Clean up and go home		if (theSocket >= 0)	{		MacSocket_close(theSocket);	}		if (ssl != nil)	{		SSL_free(ssl);	}		if (ssl_ctx != nil)	{		SSL_CTX_free(ssl_ctx);	}			if (errCode != noErr)	{		printf("An error occurred:\n");				printf("%s",GetErrorMessage());	}			MacSocket_Shutdown();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -