mirror of
https://github.com/ading2210/libcurl.js.git
synced 2025-05-12 22:10:01 -04:00
add proxy server code
This commit is contained in:
parent
dfd9a7a8ae
commit
953b6cb191
6 changed files with 75 additions and 10 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -1,6 +1,3 @@
|
||||||
/client/build
|
/client/build
|
||||||
/client/out
|
/client/out
|
||||||
/client/cacert.pem
|
/server/.venv
|
||||||
/client/libcurl.data
|
|
||||||
/srelay*
|
|
||||||
/websockify
|
|
18
README.md
18
README.md
|
@ -8,12 +8,13 @@ This is an experimental port of [libcurl](https://curl.se/libcurl/) to WebAssemb
|
||||||
- Support for up to TLS 1.3
|
- Support for up to TLS 1.3
|
||||||
|
|
||||||
## Building:
|
## Building:
|
||||||
You can build this project by cloning this repo and running the following commands:
|
You can build this project by running the following commands:
|
||||||
```
|
```
|
||||||
|
git clone https://github.com/ading2210/libcurl.js
|
||||||
cd libcurl.js/client
|
cd libcurl.js/client
|
||||||
./build.sh
|
./build.sh
|
||||||
```
|
```
|
||||||
Make sure you have emscripten, git, and the various C build tools installed.
|
Make sure you have emscripten, git, and the various C build tools installed. The build script will generate `client/out/libcurl.js`.
|
||||||
|
|
||||||
## Javascript API:
|
## Javascript API:
|
||||||
|
|
||||||
|
@ -33,15 +34,22 @@ document.addEventListener("libcurl_load", ()=>{
|
||||||
|
|
||||||
Once loaded, there will be a `window.libcurl` object which includes all the API functions.
|
Once loaded, there will be a `window.libcurl` object which includes all the API functions.
|
||||||
|
|
||||||
### Making HTTP Requests
|
### Making HTTP Requests:
|
||||||
To make HTTP requests, use `libcurl.fetch`, which takes the same arguments as the browser's regular `fetch` function. Like the standard Fetch API, `libcurl.fetch` will also return a `Response` object.
|
To perform HTTP requests, use `libcurl.fetch`, which takes the same arguments as the browser's regular `fetch` function. Like the standard Fetch API, `libcurl.fetch` will also return a `Response` object.
|
||||||
```js
|
```js
|
||||||
let r = await libcurl.fetch("https://ading.dev");
|
let r = await libcurl.fetch("https://ading.dev");
|
||||||
console.log(await r.text());
|
console.log(await r.text());
|
||||||
```
|
```
|
||||||
|
|
||||||
## Proxy Server:
|
## Proxy Server:
|
||||||
The proxy server consists of a SOCKS5 proxy server behind a websocket TCP reverse proxy. Code for running this as a single program is planned.
|
The proxy server consists of a [SOCKS5 proxy server](https://github.com/Amaindex/asyncio-socks-server) behind a [websocket TCP proxy](https://github.com/novnc/websockify).
|
||||||
|
|
||||||
|
To host the proxy server, run the following commands:
|
||||||
|
```
|
||||||
|
git clone https://github.com/ading2210/libcurl.js
|
||||||
|
cd libcurl.js/server
|
||||||
|
./run.sh
|
||||||
|
```
|
||||||
|
|
||||||
## Copyright:
|
## Copyright:
|
||||||
This project is licensed under the GNU AGPL v3.
|
This project is licensed under the GNU AGPL v3.
|
||||||
|
|
|
@ -4,7 +4,6 @@ set -e
|
||||||
|
|
||||||
INCLUDE_DIR="build/curl-wasm/include/"
|
INCLUDE_DIR="build/curl-wasm/include/"
|
||||||
LIB_DIR="build/curl-wasm/lib/"
|
LIB_DIR="build/curl-wasm/lib/"
|
||||||
CACERT_FILE="cacert.pem"
|
|
||||||
OUT_FILE="out/libcurl.js"
|
OUT_FILE="out/libcurl.js"
|
||||||
MODULE_FILE="out/libcurl_module.js"
|
MODULE_FILE="out/libcurl_module.js"
|
||||||
WRAPPER_SOURCE="main.js"
|
WRAPPER_SOURCE="main.js"
|
||||||
|
|
43
server/main.py
Normal file
43
server/main.py
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
import logging
|
||||||
|
import threading
|
||||||
|
import os
|
||||||
|
|
||||||
|
from asyncio_socks_server.app import SocksServer
|
||||||
|
from websockify.websocketproxy import WebSocketProxy
|
||||||
|
|
||||||
|
#start a socks5 proxy as well as websockify
|
||||||
|
|
||||||
|
def setup_logging(prefix):
|
||||||
|
stderr_handler = logging.StreamHandler()
|
||||||
|
stderr_handler.setLevel(logging.DEBUG)
|
||||||
|
log_formatter = logging.Formatter(prefix + "%(message)s")
|
||||||
|
stderr_handler.setFormatter(log_formatter)
|
||||||
|
root = logging.getLogger()
|
||||||
|
root.addHandler(stderr_handler)
|
||||||
|
root.setLevel(logging.INFO)
|
||||||
|
|
||||||
|
def start_websockify():
|
||||||
|
options = {
|
||||||
|
"listen_host": "127.0.0.1",
|
||||||
|
"listen_port": 6001,
|
||||||
|
"target_host": "127.0.0.1",
|
||||||
|
"target_port": 1080
|
||||||
|
}
|
||||||
|
|
||||||
|
server = WebSocketProxy(**options)
|
||||||
|
server.start_server()
|
||||||
|
|
||||||
|
def start_socks():
|
||||||
|
socks_app = SocksServer(
|
||||||
|
LISTEN_HOST="127.0.0.1",
|
||||||
|
LISTEN_PORT=1080
|
||||||
|
)
|
||||||
|
socks_app.run()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
pid = os.fork()
|
||||||
|
if pid == 0:
|
||||||
|
setup_logging("[websockify] ")
|
||||||
|
start_websockify()
|
||||||
|
else:
|
||||||
|
start_socks()
|
2
server/requirements.txt
Normal file
2
server/requirements.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
websockify
|
||||||
|
asyncio-socks-server
|
16
server/run.sh
Executable file
16
server/run.sh
Executable file
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#install dependencies and run the proxy server
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ ! -d ".venv" ]; then
|
||||||
|
python3 -m venv .venv
|
||||||
|
fi
|
||||||
|
source .venv/bin/activate
|
||||||
|
|
||||||
|
if ! python3 -c "import asyncio_socks_server, websockify" 2> /dev/null; then
|
||||||
|
pip3 install -r requirements.txt
|
||||||
|
fi
|
||||||
|
|
||||||
|
python3 main.py
|
Loading…
Add table
Add a link
Reference in a new issue