[BUG][FIX] Put proxy authentication back into HTTPSocket

David Faught dave_faught at yahoo.com
Tue Apr 19 14:03:20 UTC 2005


>From the changeSet preamble:
Change Set:		HTTPAuthAgain2-daf
Date:			19 April 2005
Author:			Dave Faught

Enable proxy authentication again after it was removed by changes
6277HTTPSocketRedirectFix-st and
6651ExternalCleanup

This also fixes Mantix bug 912.



		
__________________________________ 
Do you Yahoo!? 
Plan great trips with Yahoo! Travel: Now over 17,000 guides!
http://travel.yahoo.com/p-travelguide
--0-1425557776-1113919400=:32653
Content-Type: text/plain; name="HTTPAuthAgain2-daf.1.cs"
Content-Description: HTTPAuthAgain2-daf.1.cs
Content-Disposition: inline; filename="HTTPAuthAgain2-daf.1.cs"

'From Squeak3.8gamma of ''24 November 2004'' [latest update: #6662] on 19 April 2005 at 8:58:20 am'!
"Change Set:		HTTPAuthAgain2-daf
Date:			19 April 2005
Author:			Dave Faught

Enable proxy authentication again after it was removed by changes 6277HTTPSocketRedirectFix-st and
6651ExternalCleanup"!


!HTTPSocket class methodsFor: '*monticello-override' stamp: 'daf 4/19/2005 08:20'!
httpGetDocument: url args: args accept: mimeType request: requestString 
	"Return the exact contents of a web object. Asks for the given
	MIME 
	type. If mimeType is nil, use 'text/html'. An extra
	requestString may be 
	submitted and must end with crlf. The parsed header is saved.
	Use a 
	proxy server if one has been registered. tk 7/23/97 17:12"

	"Note: To fetch raw data, you can use the MIME type 
	'application/octet-stream'."

	| serverName serverAddr port sock header length bare page list firstData aStream index connectToHost connectToPort type newUrl |
	Socket initializeNetwork.
	bare := (url asLowercase beginsWith: 'http://') 
				ifTrue: [url copyFrom: 8 to: url size]
				ifFalse: [url].
	bare := bare copyUpTo: $#.
	"remove fragment, if specified"
	serverName := bare copyUpTo: $/.
	page := bare copyFrom: serverName size + 1 to: bare size.
	(serverName includes: $:) 
		ifTrue: 
			[index := serverName indexOf: $:.
			port := (serverName copyFrom: index + 1 to: serverName size) asNumber.
			serverName := serverName copyFrom: 1 to: index - 1]
		ifFalse: [port := self defaultPort].
	page size = 0 ifTrue: [page := '/'].
	"add arguments"
	args ifNotNil: [page := page , (self argString: args)].
	(self shouldUseProxy: serverName) 
		ifTrue: 
			[page := 'http://' , serverName , ':' , port printString , page.
			"put back 
			together"
			connectToHost := HTTPProxyServer.
			connectToPort := HTTPProxyPort]
		ifFalse: 
			[connectToHost := serverName.
			connectToPort := port].
	serverAddr := NetNameResolver addressForName: connectToHost timeout: 20.
	serverAddr 
		ifNil: [^'Could not resolve the server named: ' , connectToHost].
	3 timesRepeat: 
			[sock := HTTPSocket new.
			sock connectTo: serverAddr port: connectToPort.
			(sock waitForConnectionUntil: (self deadlineSecs: 30)) 
				ifFalse: 
					[Socket deadServer: connectToHost.
					sock destroy.
					^'Server ' , connectToHost , ' is not responding'].
			"Transcript cr;show: url; cr.
			Transcript show: page; cr."
			sock 
				sendCommand: 'GET ' , page , ' HTTP/1.0' , CrLf 
						, (mimeType ifNil: [''] ifNotNil: ['ACCEPT: ' , mimeType , CrLf]) 
							, 'ACCEPT: text/html' , CrLf 
						, HTTPProxyCredentials
						, HTTPBlabEmail , requestString 
						, self userAgentString , CrLf 
						, 'Host: ' , serverName 
						, ':' , port printString 
						, CrLf.
			"Always accept plain text"
			"may be empty"
			"extra user request. Authorization"
			"blank line 
			automatically added"
			list := sock getResponseUpTo: CrLf , CrLf ignoring: (String with: CR).
			"list = header, CrLf, CrLf, 
			beginningOfData"
			header := list at: 1.
			"Transcript show: page; cr; show: header; cr."
			firstData := list at: 3.
			header isEmpty 
				ifTrue: [aStream := 'server aborted early']
				ifFalse: 
					["dig out some headers"

					sock header: header.
					length := sock getHeader: 'content-length'.
					length ifNotNil: [length := length asNumber].
					type := sock getHeader: 'content-type'.
					sock responseCode first = $3 
						ifTrue: 
							[newUrl := sock getHeader: 'location'.
							newUrl ifNotNil: 
									[Transcript
										show: 'redirecting to ' , newUrl;
										cr.
									sock destroy.
									newUrl := Url combine: url withRelative: newUrl.
									^self 
										httpGetDocument: newUrl
										args: args
										accept: mimeType
										request: requestString]].
					aStream := sock getRestOfBuffer: firstData totalLength: length.
					"a 400-series error"
					sock responseCode first = $4 ifTrue: [^header , aStream contents]].
			sock destroy.
			"Always OK to destroy!!"
			aStream isString
				ifFalse:
					[^MIMEDocument 
						contentType: type
						content: aStream contents
						url: url].
			aStream = 'server aborted early' ifTrue: [^aStream]].
	{ 
		'HTTPSocket class>>httpGetDocument:args:accept:request:'.
		aStream.
		url} inspect.
	^'some other bad thing happened!!'!
]style[(71 2108 8 20 1 1727)f2b,f2,f1,f2,f1,f2! !


More information about the Squeak-dev mailing list