请参考 curl 转 inet.http | 基于 string.curlParse
/*
请参考 curl 转 inet.http: https://www.aardio.com/zh-cn/doc/example/Network/inet/curlParse.html
基于 string.curlParse: https://www.aardio.com/zh-cn/doc/library-reference/string/curlParse.html
*/
import win.ui;
import win.ui.simpleWindow;
import win.ui.tooltip;
import fonts.fontAwesome;
import win.clip;
import web.form.simpleMarkdown;
import web.rest.curlParse;
/*DSG{{*/
var winform = win.form(text="CURL 转 aardio 代码";right=1019;bottom=619;bgcolor=0xFFFFFF;border="none")
winform.add(
btnClear={cls="plus";text="清空";left=120;top=574;right=205;bottom=607;align="left";color=0x666666;db=1;dl=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-14;name='FontAwesome');padding={left=13}};iconText='\uF12D';notify=1;textPadding={left=38};z=8};
btnConvert={cls="plus";text="转换代码";left=695;top=572;right=823;bottom=605;align="left";bgcolor=0xF65C8B;color=0xFFFFFF;db=1;dr=1;font=LOGFONT(h=-14;weight=600);iconStyle={align="left";font=LOGFONT(h=-16;name='FontAwesome');padding={left=18}};iconText='\uF061';notify=1;textPadding={left=42};z=9};
btnCopy={cls="plus";text="复制代码";left=863;top=572;right=983;bottom=605;align="left";bgcolor=0x81B910;color=0xFFFFFF;db=1;dr=1;font=LOGFONT(h=-13;weight=600);iconStyle={align="left";font=LOGFONT(h=-14;name='FontAwesome');padding={left=15}};iconText='\uF0C5';notify=1;textPadding={left=42};z=10};
btnPaste={cls="plus";text="粘贴";left=30;top=574;right=115;bottom=607;align="left";color=0x666666;db=1;dl=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-14;name='FontAwesome');padding={left=13}};iconText='\uF0EA';notify=1;textPadding={left=38};z=7};
chkCeanHeaders={cls="plus";text="精简请求头";left=415;top=574;right=540;bottom=605;align="left";db=1;dl=1;font=LOGFONT(h=-15);iconStyle={align="left";font=LOGFONT(h=-15;name='FontAwesome')};iconText='\uF0C8 ';notify=1;textPadding={left=24};z=14};
chkUserAgent={cls="plus";text="User-Agent";left=288;top=574;right=407;bottom=605;align="left";db=1;dl=1;font=LOGFONT(h=-15);iconStyle={align="left";font=LOGFONT(h=-15;name='FontAwesome')};iconText='\uF0C8 ';notify=1;textPadding={left=24};z=13};
customOutput={cls="custom";left=474;top=62;right=990;bottom=558;db=1;dl=1;dr=1;dt=1;z=6};
editInput={cls="richedit";left=30;top=62;right=463;bottom=558;db=1;dl=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=5};
inputPanel={cls="bkplus";left=15;top=62;right=462;bottom=558;bgcolor=0xFAFAFA;border=1;db=1;dl=1;dt=1;z=4};
lnkDocument={cls="syslink";text="文档指南";left=600;top=578;right=652;bottom=604;align="center";center=1;db=1;dr=1;transparent=1;z=12};
splitter={cls="splitter";left=466;top=62;right=471;bottom=558;db=1;dl=1;dt=1;frame=1;z=11};
titleBar={cls="bkplus";left=0;top=0;right=1020;bottom=52;bgcolor=0xCF5C8B;dl=1;dr=1;dt=1;z=1};
titleIcon={cls="bkplus";text='\uF120';left=18;top=12;right=48;bottom=42;color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-22;name='FontAwesome');z=2};
titleText={cls="bkplus";text="CURL(bash) 转 aardio 代码(web.rest)";left=52;top=12;right=401;bottom=42;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-18;weight=600);z=3}
)
/*}}*/
// 初始化 Markdown 视图
var wb = web.form.simpleMarkdown(winform.customOutput);
var lastGeneratedCode = ""; // 记录最后生成的代码
// 转换逻辑
winform.btnConvert.oncommand = function(id,event){
var curl = winform.editInput.text;
if(!#string.trim(curl)){
winform.msgbox("请先输入 CURL 命令", "提示");
winform.editInput.setFocus()
return;
}
// 禁用按钮并显示动画
winform.btnConvert.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250'}
wb.setMarkdown("")
wb.showLoading('正在转换 cURL 命令为 aardio 代码 ...');
// 异步解析(避免界面卡死)
thread.invoke(
function(winform,wb,curl){
import web.rest.curlParse;
var code, err = web.rest.curlParse(curl,{
userAgent = winform.chkUserAgent.checked;
cleanHeaders = winform.chkCeanHeaders.checked;
});
winform.btnConvert.disabledText = null;
if(!code){
wb.showError(err : "转换失败,请检查格式");
return;
}
wb.writeDelta('```aardio\n')
winform.lastGeneratedCode = code;
for(line in string.lines(code)){
wb.writeDelta(line+'\n');
}
wb.writeDelta( '\n```');
wb.writeDelta(null)
},winform,wb,curl
)
}
// 粘贴
winform.btnPaste.oncommand = function(id,event){
var text = win.clip.read();
if(#text){
winform.editInput.text = text;
winform.editInput.setFocus();
}
}
// 清空
winform.btnClear.oncommand = function(id,event){
winform.editInput.text = "";
wb.write("");
lastGeneratedCode = "";
winform.editInput.setFocus();
}
// 复制
winform.btnCopy.oncommand = function(id,event){
if(!#winform.lastGeneratedCode){
winform.msgbox("没有可复制的代码", "提示");
return;
}
win.clip.write(winform.lastGeneratedCode);
var originalText = winform.btnCopy.text;
var originalIcon = winform.btnCopy.iconText;
winform.btnCopy.text = "已复制";
winform.btnCopy.iconText = '\uF00C';
winform.setTimeout(function(){
winform.btnCopy.text = originalText;
winform.btnCopy.iconText = originalIcon;
}, 1000)
}
// 快捷键
winform.editInput.onOk = function(ctrl,alt,shift){
if(ctrl){
winform.btnConvert.oncommand();
return true;
}
}
// 分割条关联
winform.splitter.split(winform.editInput, winform.customOutput);
// 按钮皮肤设置(使用 0xAARRGGBB 格式颜色)
winform.btnConvert.skin({
background={
default=0xFFCF5C8B;
hover=0xFFE06C9B;
active=0xFFBF4C7B;
disabled=0xFFCCCCCC
};
color={default=0xFFFFFFFF};
border={default={radius=4}}
})
var graySkin = {
background={
default=0xFFF2F2F2;
hover=0xFFE5E5E5;
active=0xFFD9D9D9
};
color={default=0xFF666666};
border={radius=4;color=0xFFDBDBDB;width=1}
}
winform.btnPaste.skin(graySkin);
winform.btnClear.skin(graySkin);
winform.btnCopy.skin({
background={
default=0xFF81B910;
hover=0xFF91C920;
active=0xFF71A900
};
color={default=0xFFFFFFFF};
border={default={radius=4}}
})
wb.write("### 操作步骤
👈 请在左侧粘贴 **cURL(bash)** 命令,点击 **转换代码** 或按 `Ctrl + Enter`。
### 快捷转换
1. 复制 **cURL(base)** 命令
2. aardio 编辑器右键菜单点 <mark>粘贴并更正</mark> 或按 `Ctrl+Shift+V`。
也会自动转换 `curl` 命令为 aardio 代码。
### AI 转换
1. 打开 `问 AI` 助手
2. 直接发送 **cURL(base)** 命令
> 示例 <a href='javascript:void(0)' onclick='javascript:external.post()'>» 发送 POST 请求</a> <a href='javascript:void(0)' onclick='javascript:external.get()'>» 发送 GET 请求</a> <a href='javascript:void(0)' onclick='javascript:external.cookies()'>» 指定 Cookies</a>
");
wb.external = {
get = function(){
winform.editInput.text = /*
curl "https://httpbin.org/anything/api/v1/users?status=active" \
-H "Authorization: Bearer sk-my-secret-token" \
-H "Accept: application/json"
*/
};
post = function(){
winform.editInput.text = /*
curl -X POST "https://httpbin.org/anything/chat/completions" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4",
"messages": [
{"role": "system", "content": "You are a coding assistant."},
{"role": "user", "content": "Hello aardio!"}
],
"temperature": 0.7
}'
*/
}
cookies = function(){
winform.editInput.text = /*
curl -H "Accept: application/json" \
-b "name=value; name2=value2" https://httpbin.org/cookies
*/
};
}
win.ui.simpleWindow(winform);
winform.show();
var text = win.clip.read();
if(web.rest.curlParse.test(text)){
winform.editInput.text = text;
}
else{
winform.editInput.setFocus()
}
winform.lnkDocument.link = "https://www.aardio.com/zh-cn/doc/library-guide/std/web/rest/client.html";
winform.lnkDocument.onHyperlinkClick = function(nmSysLink,url,id,index){
import ide;
ide.openDocument("https://www.aardio.com/zh-cn/doc/library-guide/std/web/rest/client.html")
}
winform.chkCeanHeaders.checked = true;
winform.chkCeanHeaders.skin({
color={
active=0xFF00FF00;
default=0xFF000000;
disabled=0xEE666666;
hover=0xFFFF0000
};
checked={
iconText='\uF14A'
}
})
winform.chkUserAgent.skin({
color={
active=0xFF00FF00;
default=0xFF000000;
disabled=0xEE666666;
hover=0xFFFF0000
};
checked={
iconText='\uF14A'
}
})
win.loopMessage();
Markdown 格式