python ip动态代理_动态代理服务器
// 定义申请获得的appKey和appSecret
String appkey = "XXXXXXXX";
String secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
// 创建参数表
Map paramMap = new HashMap();
paramMap.put("app_key", appkey);
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("GMT+8"));//使用中国时间,以免时区不同导致认证错误
paramMap.put("timestamp", format.format(new Date()));
// 对参数名进行排序
String[] keyArray = paramMap.keySet().toArray(new String[0]);
Arrays.sort(keyArray);
// 拼接有序的参数名-值串
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(secret);
for(String key : keyArray){
stringBuilder.append(key).append(paramMap.get(key));
}
stringBuilder.append(secret);
String codes = stringBuilder.toString();
// MD5编码并转为大写, 这里使用的是Apache codec
String sign = org.apache.commons.codec.digest.DigestUtils.md5Hex(codes).toUpperCase();
paramMap.put("sign", sign);
// 拼装请求头Proxy-Authorization的值,这里使用 guava 进行map的拼接
String authHeader = "MYH-AUTH-MD5 " + Joiner.on('&').withKeyValueSeparator("=").join(paramMap);
System.out.println(authHeader);
//接下来使用蚂蚁动态代理进行访问
//这里以jsoup为例,将authHeader放入请求头中即可
//原版的jsoup设置代理不方便,这里使用E-lai提供的修改版(https://github.com/E-lai/jsoup-proxy)
//注意authHeader必须在每次请求时都重新计算,要不然会因为时间误差而认证失败
Document doc = Jsoup.connect("http://1212.ip138.com/ic.asp").proxy("test.proxy.mayidaili.com", 8123, null).header("Proxy-Authorization", authHeader).get();
...
import hashlib
import time
import urllib2
#请替换appkey和secret
appkey = "XXXXXXXX"
secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
paramMap = {
"app_key": appkey,
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S") #如果你的程序在国外,请进行时区处理
}
#排序
keys = paramMap.keys()
keys.sort()
codes= "%s%s%s" % (secret,str().join('%s%s' % (key, paramMap[key]) for key in keys),secret)
#计算签名
sign = hashlib.md5(codes).hexdigest().upper()
paramMap["sign"] = sign
#拼装请求头Proxy-Authorization的值
keys = paramMap.keys()
authHeader = "MYH-AUTH-MD5 " + str('&').join('%s=%s' % (key, paramMap[key]) for key in keys)
print authHeader
#接下来使用蚂蚁动态代理进行访问
proxy_handler = urllib2.ProxyHandler({"http" : 'http://test.proxy.mayidaili.com:8123'})
opener = urllib2.build_opener(proxy_handler)
request = urllib2.Request('http://1212.ip138.com/ic.asp')
//将authHeader放入请求头中即可,注意authHeader必须在每次请求时都重新计算,要不然会因为时间误差而认证失败
request.add_header('Proxy-Authorization', authHeader)
response = opener.open(request)
print response.read()
感谢网友 Terry 150***157 提供Python3示例
# Python 3.x
import hashlib
import time
import requests
# 找群主购买 my_app_key, myappsecret, 以及蚂蚁代理服务器的 mayi_url 地址和 mayi_port 端口
my_app_key = "xxxx"
app_secret = "xxxxxxxxxxxxxxxxxxx"
mayi_url = '127.0.0.1'
mayi_port = '8123'
# 蚂蚁代理服务器地址
mayi_proxy = {'http': 'http://{}:{}'.format(mayi_url, mayi_port)}
# 准备去爬的 URL 链接
url = 'http://1212.ip138.com/ic.asp'
# 计算签名
timesp = '{}'.format(time.strftime("%Y-%m-%d %H:%M:%S"))
codes = app_secret + 'app_key' + my_app_key + 'timestamp' + timesp + app_secret
sign = hashlib.md5(codes.encode('utf-8')).hexdigest().upper()
# 拼接一个用来获得蚂蚁代理服务器的「准入」的 header (Python 的 concatenate '+' 比 join 效率高)
authHeader = 'MYH-AUTH-MD5 sign=' + sign + '&app_key=' + my_app_key + '×tamp=' + timesp
# 用 Python 的 Requests 模块。先订立 Session(),再更新 headers 和 proxies
s = requests.Session()
s.headers.update({'Proxy-Authorization': authHeader})
s.proxies.update(mayi_proxy)
pg = s.get(url, timeout=(300, 270)) # tuple: 300 代表 connect timeout, 270 代表 read timeout
pg.encoding = 'GB18030'
print(pg.text)
感谢网友 7天幸福 z.yifan 提供PHP示例
//设置时区(使用中国时间,以免时区不同导致认证错误)
date_default_timezone_set("Asia/Shanghai");
//AppKey 信息,请替换
$appKey = 'XXXXXXXX';
//AppSecret 信息,请替换
$secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
//示例请求参数
$paramMap = array(
'app_key' => $appKey,
'timestamp' => date('Y-m-d H:i:s')
);
//按照参数名排序
ksort($paramMap);
//连接待加密的字符串
$codes = $secret;
//请求的URL参数
$auth = 'MYH-AUTH-MD5 ';
foreach ($paramMap as $key => $val) {
$codes .= $key . $val;
$auth .= $key . '=' . $val . '&';
}
$codes .= $secret;
//签名计算
$auth .= 'sign=' . strtoupper(md5($codes));
//接下来使用蚂蚁动态代理进行访问(也可以使用curl方式)
$opts = array(
'http' => array(
'proxy' => 'test.proxy.mayidaili.com:8123',
'request_fulluri' => true,
'header' => "Proxy-Authorization: {$auth}",
),
);
$context = stream_context_create($opts);
$ip = file_get_contents("http://1212.ip138.com/ic.asp", false, $context);
echo $ip;
感谢网友 Mike Cheers 熬夜提供csharp示例
/*
* 为蚂蚁代理-动态代理服务撰写的C#调用范例
* 作者:Mike Cheers
* 2016-01-16
*/
namespace MaYiProxy_Example
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
class Program
{
// 定义常量
static string appKeyName = "app_key"; // 定义appKey名称
static string appKey = "XXXXX"; // 申请获得的appKey
static string secret = "XXXXXXXXXXXXXXXXXXXX"; // 申请获得的appSecret
static string timestampName = "timestamp"; // 定义时间戳名称
static string signPrefix = "sign="; // 定义签名固定前缀
static string authHeaderPrefix = "MYH-AUTH-MD5 "; // Header值的固定前缀
static string authHeaderName = "Proxy-Authorization"; // Header名字
static WebProxy proxy = new WebProxy("test.proxy.mayidaili.com", 8123); // 定义代理服务器位置
static void Main(string[] args)
{
#region 定义请求列表
List requests = new List();
HttpWebRequest request1 = WebRequest.Create("https://www.baidu.com") as HttpWebRequest;
HttpWebRequest request2 = WebRequest.Create("http://www.sina.com.cn") as HttpWebRequest;
HttpWebRequest request3 = WebRequest.Create("http://www.sohu.com") as HttpWebRequest;
requests.Add(request1);
requests.Add(request2);
requests.Add(request3);
#endregion
// 实际应用中可使用多线程,为了使示例简单,这里遍历请求列表,模拟多个请求
foreach (HttpWebRequest request in requests)
{
// 在请求发送之前,对请求进行封装;
// 请在RebuildRequest方法中获取详细信息;
RebuildRequest(request);
#region 对请求及回复的信息进行打印,并没有什么特别功能;
if (null == request)
{
Console.WriteLine("Something wrong with request!");
}
else
{
var response = request.GetResponse() as HttpWebResponse;
var builder = new StringBuilder(">* Request Uri *-".PadRight(70, '-')
+ Environment.NewLine
+ string.Empty.PadRight(8, ' ')
+ request.RequestUri.ToString()
+ Environment.NewLine);
if (null != request.Headers && null != request.Headers.AllKeys && request.Headers.AllKeys.Length > 0)
{
builder.AppendLine(">* Request Headers *-".PadRight(70, '-'));
foreach (var key in request.Headers.AllKeys)
{
builder.AppendLine(string.Empty.PadRight(8, ' ') + key + " = " + request.Headers[key]);
}
}
if (null != request.Proxy && request.Proxy is WebProxy && null != (request.Proxy as WebProxy).Address)
{
builder.AppendLine(">* Request Proxy *-".PadRight(70, '-'));
builder.AppendLine(string.Empty.PadRight(8, ' ') + (request.Proxy as WebProxy).Address.ToString());
}
if (null == response)
{
builder.AppendLine("Something wrong with response!");
}
else
{
if (null != response.Headers && null != response.Headers.AllKeys && response.Headers.AllKeys.Length > 0)
{
builder.AppendLine("*< Response Headers *-".PadRight(70, '-'));
foreach (var key in response.Headers.AllKeys)
{
builder.AppendLine(string.Empty.PadRight(8, ' ') + key + " = " + response.Headers[key]);
}
}
builder.AppendLine("*< Response Status Code *-".PadRight(70, '-')
+ Environment.NewLine
+ string.Empty.PadRight(8, ' ')
+ response.StatusCode);
}
response.Close();
request.Abort();
Console.WriteLine(builder.ToString());
#endregion
}
// 这里做了350ms的延迟
// 只是为了便于观察不同的时间计算的签名(sign)值结果不同
// 三次请求中,必有一次签名结果与其它两个不同
// 强调了每次发送请求重新计算签名的重要性,否则会验证失败
// 实际应用中并不需要做此延迟
System.Threading.Thread.Sleep(350);
}
Console.ReadLine();
}
/// /// 为Http请求指定Header及Proxy
///
private static void RebuildRequest(HttpWebRequest request)
{
if (null == request) return;
#region 签名计算
// 定义参与签名计算的参数列表
Dictionary dicParams = new Dictionary();
dicParams.Add(appKeyName, appKey);
dicParams.Add(timestampName, TimeZoneInfo.ConvertTime(DateTime.Now // 这里注意时间总是取DateTime.Now,所以每次请求都需要重新计算签名
, TimeZoneInfo.Local).ToString("yyyy-MM-dd HH:mm:ss")); // 这里注意时区需要使用"GMT+8"(中国时间),以免时区不同导致认证错误
// 对Key值进行Alpha排序,这里使用了linq方法,可以用其他熟悉的方法代替;
var akeys = dicParams.OrderBy, string>(pair => { return pair.Key; });
// 定义两个StringBuilder用来做字符串拼接
// 注意构造函数的参数不同
StringBuilder codes = new StringBuilder(secret)
, authHeader = new StringBuilder(authHeaderPrefix);
// 对Key-Value值进行拼接,注意拼接方式的差异;
foreach (var pair in akeys)
{
codes.Append(pair.Key + pair.Value);
authHeader.Append(pair.Key + "=" + pair.Value + "&");
}
// 只有codes需要追加secret值
codes.Append(secret);
// 计算签名
string sign = BitConverter
.ToString(MD5En(codes.ToString(), Encoding.Default)) // 对codes进行MD5加密
.Replace("-", "") // 去掉字符'-'
.ToUpper(); // 转成大写
#endregion
// 在authHeader后追加签名
authHeader.Append(signPrefix + sign);
if (null == request.Headers) request.Headers = new WebHeaderCollection();
// 为请求头加入authHeader信息
request.Headers.Add(authHeaderName, authHeader.ToString());
// 为请求设置代理服务器信息
request.Proxy = proxy;
}
/// /// md5加密,不做大小写处理
///
public static byte[] MD5En(string str, Encoding encoding)
{
if (string.IsNullOrEmpty(str)) return null;
MD5 md5 = new MD5CryptoServiceProvider();
return md5.ComputeHash(encoding.GetBytes(str));
}
}
}
感谢网友 游 (89276***)提供VB示例,在按键精灵下测试通过
appkey="XXXXXX"
secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
mayiip = "test.proxy.mayidaili.com:8123"
timestamp = DatePart("yyyy", now()) & "-" & DatePart("m", now()) & "-" & DatePart("d", now()) & " " & DatePart("h", now()) & ":" & DatePart("n", now()) & ":" & DatePart("s", now())
sign = secret&"app_key"&appkey&"timestamp"×tamp&secret
sign = Plugin.Encrypt.Md5String(sign)
jimi = "MYH-AUTH-MD5 sign=" & sign & "&app_key=" & appkey & "×tamp=" & timestamp
urlip="http://1212.ip138.com/ic.asp"
Set visit = CreateObject("WinHttp.WinHttpRequest.5.1")
With visit
.Open "get", urlip, False
.SetProxy 2,mayiip
.SetRequestHeader "Proxy-Authorization",jimi
.Send
End With
If visit.waitforresponse(10) Then '单位秒
Set operate = CreateObject("Adodb.Stream")
operate.Type = 1
operate.Mode = 3
operate.Open
operate.Write visit.ResponseBody
operate.Position = 0
operate.Type = 2
operate.Charset = "gb2312"
content= operate.ReadText
startpop = inStr(content,"[") + 1
endpop = inStr(content,"]") - startpop
IP_address = Mid(content, startpop, endpop)
TracePrint IP_address
End If
visit.Abort
Set operate = Nothing
Set visit = Nothing
感谢网友 大頭 (646***) 提供Selenium示例
#!coding:utf-8
from selenium import webdriver
import selenium
import random
import time
import sys
import urllib2
import hashlib
reload(sys)
sys.setdefaultencoding('utf-8')
dcap = dict(webdriver.DesiredCapabilities.PHANTOMJS)
def authCode():
appkey = "xxxxxxxx"
secret = "xxxxxxxxxxxxxxxxxxxx"
# 设置HTTP头信息参数
paraMap = {
"app_key": appkey,
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
}
# 排序
keys = paraMap.keys()
keys.sort()
codes = "%s%s%s" % (secret, str().join('%s%s' % (key, paraMap[key]) for key in keys), secret)
#计算签名
sign = hashlib.md5(codes).hexdigest().upper()
# 拼装请求头Proxy-Authorization的值
paraMap['sign'] = sign
keys = paraMap.keys()
authHeader = "MYH-AUTH-MD5 " + str('&').join("%s=%s" % (key, paraMap[key]) for key in keys)
return authHeader
# 创建实例
def createSelenium():
auth = authCode()
# 此处开始设置头信息
dcap["phantomjs.page.settings.userAgent"] = ('Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36')
# 此处带入proxy验证信息
dcap["phantomjs.page.customHeaders.Proxy-Authorization"] = (auth)
# By PhantomJS
args = ['--load-images=false', '--disk-cache=true', '--proxy=ProxyAddress:port']
# For Windows
# br = webdriver.PhantomJS(service_args=args, desired_capabilities=dcap, executable_path=r'C:\phantomjs\bin\phantomjs.exe')
# For MacOSX
br = webdriver.PhantomJS(service_args=args, desired_capabilities=dcap, executable_path=r'/usr/local/bin/phantomjs')
# 访问页面
br.get("http://members.3322.org/dyndns/getip")
# 设置页面等待时间,不重要
br.implicitly_wait(10)
br.set_page_load_timeout(15)
print br.page_source
br.quit()
# 接下来执行具体动作
for i in xrange(0,3):
createSelenium()
time.sleep(2)
感谢网友 夜丿未央 (97727***) 提供Nodejs示例
/**
* Created by Mr.Carry on 16/7/10.
*/
var moment = require("moment");
var crypto = require('crypto');
var cheerio = require("cheerio");
var zlib = require('zlib');
var gunzipStream = zlib.createGunzip();
var iconv = require('iconv-lite');
var http = require('http');
function md5 (text) {
return crypto.createHash('md5').update(text).digest('hex');
};
// 定义申请获得的appKey和appSecret
var app_key = "XXXX";
var secret = "XXXX";
var host = "proxy.XXXX.com";
var port = "8123";
//待抓取对网址(不带http://前缀)
var path = "www.XXX.com";
var keygen = {
"app_key" : app_key,
"timestamp" : moment().format('YYYY-MM-DD HH:mm:ss')
}
var getKey = function(){
var list = [secret];
var param = [];
for(var p in keygen){
str = p + "" + keygen[p];
list.push(str);
}
for(var p in keygen){
str = p + "=" + keygen[p];
param.push(str);
}
list.push(secret);
var m5 = "MYH-AUTH-MD5 sign=" + md5(list.join("")).toUpperCase() + "&" + param.join("&");
return m5;
}
var options = {};
options.host = host;
options.port = port;
options.method = "GET";
options.path = "http://" + path;
options.headers = {
"Proxy-Authorization": getKey(),
"Host" : path,
};
var req = http.request(options, function (res) {
var result = [];
/**
* gzip格式数据,先解压缩,再处理数据
*/
if(res.headers['content-encoding'].indexOf('gzip') != -1) {
res.pipe(gunzipStream).on("data",function(data){
/**
* 163的页面编码格式为gb2312 ,所以解压缩为GB,实际根据抓取的页面编码格式调整
*/
result.push(iconv.decode(data, 'GBK'))
}).on("end",function(){
console.log(result.join(" "))
})
}
});
req.end();
感谢网友 Cloud 提供C示例
IWinHttpRequestPtr my_pHttpReq=NULL;
CString myip;
CString lpszProxyIp=_T("xx.xx.xx.xx");//服务器IP
int dlPort=xxxx;//端口
int m_nYear = time.GetYear(); ///年
int m_nMonth = time.GetMonth(); ///月
int m_nDay = time.GetDay(); ///日
int m_nHour = time.GetHour(); ///小时
int m_nMinute = time.GetMinute(); ///分钟
int m_nSecond = time.GetSecond(); ///秒
CString timestamp;
timestamp.Format(_T("%d-%d-%d %d:%d:%d"),m_nYear,m_nMonth,m_nDay,m_nHour,m_nMinute,m_nSecond); //时间显示
do
{
try
{ HRESULT hr = S_FALSE;
if (!my_pHttpReq)
{hr = my_pHttpReq.CreateInstance(__uuidof(WinHttpRequest));
if(FAILED(hr)) return ;}
if (lpszProxyIp && _tcslen(lpszProxyIp) >= 7 && dlPort > 0 && dlPort < 65535)
{
HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_DEFAULT = 0;
HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_PRECONFIG = 0;
HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_DIRECT = 1;
HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_PROXY = 2;
CString strProxy;
strProxy.Format(_T("%s:%d"), lpszProxyIp, dlPort);
hr = my_pHttpReq->SetProxy(HTTPREQUEST_PROXYSETTING_PROXY, (LPCTSTR)strProxy);
}
hr = my_pHttpReq->Open(_T("GET"), _T("http://1212.ip138.com/ic.asp"));
if (FAILED(hr)) return ;
CString app_key =_T("xxxxxx");
CString secret =_T("xxxxxxxxxxx");
CString stymy=_T("xxxxxxxxxxxapp_keyxxxxxxtimestamp")+timestamp+_T("xxxxxxxxxxx");
/*这里是外部调用JS 把stymy的值 转为sign 也可以自己调用md5.h 附上外部JS
function mysign(strmy) {
var md5my=hex_md5(strmy);
var mystr=md5my.toUpperCase();
return mystr
}
*/
CString mysign = mystr;
CString mayiDL=_T("MYH-AUTH-MD5 sign=")+mysign+_T("&app_key=")+app_key+_T("×tamp=")+timestamp;
my_pHttpReq->SetRequestHeader(_T("Accept"), _T("*/*"));
my_pHttpReq->SetRequestHeader(_T("User-Agent"), _T("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/45.0.2454.101 Safari/537.36"));
my_pHttpReq->SetRequestHeader(_T("Content-Type"),_T("application/x-www-form-urlencoded"));
my_pHttpReq->SetRequestHeader(_T("Proxy-Authorization"),(LPCTSTR)mayiDL);
hr = my_pHttpReq->Send();
if(FAILED(hr)) return ;
CString strIP;
Get_WinHttp_RspString(my_pHttpReq, strIP);
myip=GetMidStrByLAndR(strIP, _T("您的IP是:["), _T("]"));
}
catch(_com_error &e)
{
break;
}
}while (0);
python ip动态代理_动态代理服务器相关推荐
- 第六周 Java语法总结_设计原则_工厂模式_单例模式_代理模式(静态代理_动态代理)_递归_IO流_网络编程(UDP_TCP)_反射_数据库
文章目录 20.设计原则 1.工厂模式 2.单例模式 1)饿汉式 2)懒汉式 3.Runtime类 4.代理模式 1)静态代理 2)动态代理 动态代理模板 21.递归 22.IO流 1.File 2. ...
- 利用代码分别实现jdk动态代理和cglib动态代理_面试之动态代理
大家好!我是CSRobot,从今天开始,我将会发布一些技术文章,内容就是结合春招以来的面试所遇到的问题进行分享,首先会对知识点进行一个探讨和整理,在最后会给出一些面试题并作出解答,希望可以帮助到大家! ...
- mysql动态代理_超全MyBatis动态代理详解(绝对干货)
前言 假如有人问你这么几个问题,看能不能答上来 Mybatis Mapper 接口没有实现类,怎么实现的动态代理 JDK 动态代理为什么不能对类进行代理(充话费送的问题) 抽象类可不可以进行 JDK ...
- 静态代理,cglib动态代理,jdk动态代理区别以及流程详解
1.静态代理 静态代理使用的是代理设计模式,不讲高大上的思想,我们直接实战 这是动物接口,其中有一个吃饭方法 这是其中的一只动物,实现了动物接口,覆盖了吃饭方法 现在我们思考,我想要给猫找一个代理,希 ...
- 什么是动态代理?动态代理有哪些应用?如何编写动态代理案例
什么是动态代理? 当我们需要给某个类或者接口中的方法添加一些额外的功能比如日志.事务的时候,可以通过创建一个代理类来实现这些功能:该代理类既包含了原有类的完整功能,同时在这些功能的基础上添加了其他的逻 ...
- JAVA 进阶篇 动态代理 JDK动态代理和CGlib动态代理
JDK动态代理和CGlib动态代理 JDK动态代理: 利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. CGlib动态代理: 利用ASM(开源的Java ...
- Java设计模式(五)代理设计模式—静态代理—JDK动态代理—Cglib动态代理
文章目录 什么是代理模式 代理模式应用场景 代理的分类 静态代理 什么是静态代理 深入解析静态代理 小结 动态代理 什么是动态代理 JDK动态代理 原理和实现方式 代码实现 优缺点 Cglib动态代理 ...
- 动态代理——CGLIB动态代理原理示例解析
觉得可以的话点个关注,转个发呗,陆续奉上干货~~~~ 前文我们讲解了JDK动态代理的原理(动态代理--JDK动态代理原理),今天我们来看看CGLIB动态代理是如何实现,最后我们总结下JDK动态代理和C ...
- Java两种动态代理JDK动态代理和CGLIB动态代理
目录 代理模式 JDK动态代理 cglib动态代理 测试 代理模式 代理模式是23种设计模式的一种,他是指一个对象A通过持有另一个对象B,可以具有B同样的行为的模式.为了对外开放协议,B往往实现了一个 ...
最新文章
- 腾讯发布AR导航,“生态+技术”驱动下一代智能座舱体验跃迁
- 带你学习JQuery:事件冒泡和阻止默认行为
- php输出tab,设置Tab按钮列表 · DolphinPHP1.5.0完全开发手册-基于ThinkPHP5.1.41LTS的快速开发框架 · 看云...
- jspx格式手机打开_制作手机浏览器显示格式的HTML页面
- StringBuilder对象的常用方法 c#1614651638
- android,PHP解析JSON数组,JSONArray,JSONOject,乱码
- [推荐]WebService开发知识介绍
- 机器学习---分类、回归、聚类、降维的区别
- 头歌-离散数学(python)-关系运算
- Qt开源作品41-网络调试助手增强版V2022
- 贝尔维尤游戏巨头融资2亿美元!
- 问题 H: LZY碎大石
- 解决win11不能拖拽图片进ppt/ps的问题
- AutoCAD .Net 创建直线Line
- API 鉴权插件上线!支持用户自定义鉴权插件
- 【matlab报错问题个人总结】数组超出索引维度
- 死亡搁浅 服务器不稳定,[收集]死亡搁浅现有bug临时解决方案
- 面向对象的一些知识:封装、继承、多态
- Java3D与其他三维技术的比较
- dbd:oracle下载,perl DBD::oracle