mirror of
				https://github.com/kepler155c/opus
				synced 2025-10-31 07:33:00 +00:00 
			
		
		
		
	proper fix for builtin broken http.get
This commit is contained in:
		
							
								
								
									
										35
									
								
								sys/init/1.http.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								sys/init/1.http.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | --[[ | ||||||
|  | FIX for http.get | ||||||
|  | currently, when 2 requests are generated at same time (diff coroutines) they both | ||||||
|  | will receive the same file handle. This change will ensure each request gets the | ||||||
|  | proper response. | ||||||
|  | --]] | ||||||
|  |  | ||||||
|  | local http = _G.http | ||||||
|  |  | ||||||
|  | local reqs = { } | ||||||
|  |  | ||||||
|  | local function wrapRequest(_url, ...) | ||||||
|  |     local ok, err = http.request(...) | ||||||
|  |     if ok then | ||||||
|  |         while true do | ||||||
|  |             local event, param1, param2, param3 = os.pullEvent() | ||||||
|  |  | ||||||
|  |             if event == "http_success" | ||||||
|  |                 and param1 == _url | ||||||
|  |                 and not reqs[tostring(param2)] then | ||||||
|  |  | ||||||
|  |                 reqs[tostring(param2)] = true | ||||||
|  |                 return param2 | ||||||
|  |  | ||||||
|  |             elseif event == "http_failure" and param1 == _url then | ||||||
|  |                 return nil, param2, param3 | ||||||
|  |             end | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  |     return nil, err | ||||||
|  | end | ||||||
|  |  | ||||||
|  | http.safeGet = function(_url, _headers, _binary) | ||||||
|  |     return wrapRequest(_url, _url, nil, _headers, _binary) | ||||||
|  | end | ||||||
| @@ -536,7 +536,7 @@ end | |||||||
|  |  | ||||||
| --[[ loading and running functions ]] -- | --[[ loading and running functions ]] -- | ||||||
| function Util.httpGet(url, headers, isBinary) | function Util.httpGet(url, headers, isBinary) | ||||||
| 	local h, msg = http.get(url, headers, isBinary) | 	local h, msg = http.safeGet(url, headers, isBinary) | ||||||
| 	if h then | 	if h then | ||||||
| 		local contents = h.readAll() | 		local contents = h.readAll() | ||||||
| 		h.close() | 		h.close() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 kepler155c@gmail.com
					kepler155c@gmail.com