mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-04-20 01:33:13 +00:00
Merge pull request #159 from SquidDev-CC/feature/http-extensions
Various extensions to the HTTP API
This commit is contained in:
commit
1b562ae837
src/main
java/dan200/computercraft/core/apis
resources/assets/computercraft/lua
@ -52,12 +52,16 @@ public class HTTPAPI implements ILuaAPI
|
||||
if( h.wasSuccessful() ) {
|
||||
// Queue the "http_success" event
|
||||
final BufferedReader contents = h.getContents();
|
||||
final int responseCode = h.getResponseCode();
|
||||
final Object result = wrapBufferedReader( contents, responseCode );
|
||||
final Object result = wrapBufferedReader( contents, h.getResponseCode(), h.getResponseHeaders() );
|
||||
m_apiEnvironment.queueEvent( "http_success", new Object[] { url, result } );
|
||||
} else {
|
||||
// Queue the "http_failure" event
|
||||
m_apiEnvironment.queueEvent( "http_failure", new Object[] { url, "Could not connect" } );
|
||||
BufferedReader contents = h.getContents();
|
||||
Object result = null;
|
||||
if( contents != null ) {
|
||||
result = wrapBufferedReader( contents, h.getResponseCode(), h.getResponseHeaders() );
|
||||
}
|
||||
m_apiEnvironment.queueEvent( "http_failure", new Object[]{ url, "Could not connect", result } );
|
||||
}
|
||||
it.remove();
|
||||
}
|
||||
@ -65,7 +69,7 @@ public class HTTPAPI implements ILuaAPI
|
||||
}
|
||||
}
|
||||
|
||||
private static ILuaObject wrapBufferedReader( final BufferedReader reader, final int responseCode )
|
||||
private static ILuaObject wrapBufferedReader( final BufferedReader reader, final int responseCode, final Map<String, String> responseHeaders )
|
||||
{
|
||||
return new ILuaObject() {
|
||||
@Override
|
||||
@ -75,7 +79,8 @@ public class HTTPAPI implements ILuaAPI
|
||||
"readLine",
|
||||
"readAll",
|
||||
"close",
|
||||
"getResponseCode"
|
||||
"getResponseCode",
|
||||
"getResponseHeaders",
|
||||
};
|
||||
}
|
||||
|
||||
@ -131,6 +136,11 @@ public class HTTPAPI implements ILuaAPI
|
||||
// getResponseCode
|
||||
return new Object[] { responseCode };
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
// getResponseHeaders
|
||||
return new Object[] { responseHeaders };
|
||||
}
|
||||
default:
|
||||
{
|
||||
return null;
|
||||
|
@ -6,12 +6,15 @@
|
||||
|
||||
package dan200.computercraft.core.apis;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
import dan200.computercraft.ComputerCraft;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@ -130,7 +133,16 @@ public class HTTPRequest
|
||||
}
|
||||
|
||||
// Read response
|
||||
InputStream is = connection.getInputStream();
|
||||
InputStream is;
|
||||
int code = connection.getResponseCode();
|
||||
boolean responseSuccess;
|
||||
if (code >= 200 && code < 400) {
|
||||
is = connection.getInputStream();
|
||||
responseSuccess = true;
|
||||
} else {
|
||||
is = connection.getErrorStream();
|
||||
responseSuccess = false;
|
||||
}
|
||||
InputStreamReader isr;
|
||||
try
|
||||
{
|
||||
@ -192,9 +204,15 @@ public class HTTPRequest
|
||||
{
|
||||
// We completed
|
||||
m_complete = true;
|
||||
m_success = true;
|
||||
m_success = responseSuccess;
|
||||
m_result = result.toString();
|
||||
m_responseCode = connection.getResponseCode();
|
||||
|
||||
Joiner joiner = Joiner.on( ',' );
|
||||
Map<String, String> headers = m_responseHeaders = new HashMap<String, String>();
|
||||
for (Map.Entry<String, List<String>> header : connection.getHeaderFields().entrySet()) {
|
||||
headers.put(header.getKey(), joiner.join( header.getValue() ));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -241,6 +259,12 @@ public class HTTPRequest
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, String> getResponseHeaders() {
|
||||
synchronized (m_lock) {
|
||||
return m_responseHeaders;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean wasSuccessful()
|
||||
{
|
||||
synchronized(m_lock) {
|
||||
@ -270,4 +294,5 @@ public class HTTPRequest
|
||||
private boolean m_success;
|
||||
private String m_result;
|
||||
private int m_responseCode;
|
||||
private Map<String, String> m_responseHeaders;
|
||||
}
|
||||
|
@ -643,11 +643,11 @@ if http then
|
||||
local ok, err = nativeHTTPRequest( _url, _post, _headers )
|
||||
if ok then
|
||||
while true do
|
||||
local event, param1, param2 = os.pullEvent()
|
||||
local event, param1, param2, param3 = os.pullEvent()
|
||||
if event == "http_success" and param1 == _url then
|
||||
return param2
|
||||
elseif event == "http_failure" and param1 == _url then
|
||||
return nil, param2
|
||||
return nil, param2, param3
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,3 +1,8 @@
|
||||
New Features in ComputerCraft 1.80:
|
||||
|
||||
* Added .getResponseHeaders() to HTTP responses.
|
||||
* Return a HTTP response when a HTTP error occurs.
|
||||
|
||||
New Features in ComputerCraft 1.79:
|
||||
|
||||
* Ported ComputerCraftEdu to Minecraft 1.8.9
|
||||
|
@ -5,4 +5,4 @@ http.get( url, [headers] )
|
||||
http.post( url, postData, [headers] )
|
||||
|
||||
The HTTP API may be disabled in ComputerCraft.cfg
|
||||
A period of time after a http.request() call is made, a "http_success" or "http_failure" event will be raised. Arguments are the url and a file handle if successful. http.get() and http.post() block until this event fires instead.
|
||||
A period of time after a http.request() call is made, a "http_success" or "http_failure" event will be raised. Arguments are the url and a file handle if successful. Arguments are nil, an error message, and (optionally) a file handle if the request failed. http.get() and http.post() block until this event fires instead.
|
||||
|
@ -1,6 +1,6 @@
|
||||
New Features in ComputerCraft 1.79:
|
||||
New Features in ComputerCraft 1.80:
|
||||
|
||||
* Ported ComputerCraftEdu to Minecraft 1.8.9
|
||||
* Fixed a handful of bugs in ComputerCraft
|
||||
* Added .getResponseHeaders() to HTTP responses.
|
||||
* Return a HTTP response when a HTTP error occurs.
|
||||
|
||||
Type "help changelog" to see the full version history.
|
||||
|
Loading…
x
Reference in New Issue
Block a user