Java电报API RpcCall超时
我有一个关于电报API的问题Java电报API RpcCall超时,java,timeout,telegram,Java,Timeout,Telegram,我有一个关于电报API的问题 每当我执行RpcCall时,它总是给我一个TimeoutException,除非我执行非授权调用 我已经可以用一个号码登录,并且我在AbsApiState中将Authenticated设置为true,并且仍然只能进行非授权呼叫 这是我的密码: private void startApi() throws Exception { api = new TelegramApi(new MyApiStorage(Moin.config.getProp("useTes
每当我执行RpcCall时,它总是给我一个TimeoutException,除非我执行非授权调用 我已经可以用一个号码登录,并且我在AbsApiState中将Authenticated设置为true,并且仍然只能进行非授权呼叫 这是我的密码:
private void startApi() throws Exception
{
api = new TelegramApi(new MyApiStorage(Moin.config.getProp("useTest").equalsIgnoreCase("true") ? true : false),
new AppInfo(Moin.api_id, "console", "???", "???", "en"),
new ApiCallback()
{
@Override
public void onAuthCancelled(TelegramApi arg0)
{
System.out.println("AuthCancelled");
}
@Override
public void onUpdate(TLAbsUpdates update)
{
System.out.println("Updated | " + update.getClass());
}
@Override
public void onUpdatesInvalidated(TelegramApi arg0)
{
System.out.println("Updatefailed");
}
});
TLConfig config = null;
config = api.doRpcCallNonAuth(new TLRequestHelpGetConfig());
if(config != null)
api.getState().updateSettings(config);
else
throw new Exception("config is null, could not update DC List");
login();
}
private void login() throws IOException
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
TLSentCode code = null;
String defaultNumber = Moin.config.getProp("phoneNumber");
System.out.println("Enter a Phone Number (Default ist " + defaultNumber + "):");
String number = reader.readLine();
if(number.equals(" "))
number = defaultNumber;
System.out.println("Sending to " + number + " ...");
try
{
code = api.doRpcCallNonAuth(new TLRequestAuthSendCode(number, 0, Moin.api_id, Moin.api_hash, "en"));
}
catch (RpcException e)
{
if (e.getErrorCode() == 303)
{
int destDC = 0;
if (e.getErrorTag().startsWith("NETWORK_MIGRATE_"))
{
destDC = Integer.parseInt(e.getErrorTag().substring("NETWORK_MIGRATE_".length()));
}
else if (e.getErrorTag().startsWith("PHONE_MIGRATE_"))
{
destDC = Integer.parseInt(e.getErrorTag().substring("PHONE_MIGRATE_".length()));
}
else if (e.getErrorTag().startsWith("USER_MIGRATE_"))
{
destDC = Integer.parseInt(e.getErrorTag().substring("USER_MIGRATE_".length()));
}
else
{
e.printStackTrace();
}
api.switchToDc(destDC);
code = api.doRpcCallNonAuth(new TLRequestAuthSendCode(number, 0, Moin.api_id, Moin.api_hash, "en"));
}
else
e.printStackTrace();
}
String hash = code.getPhoneCodeHash();
System.out.println("Please Enter the Code:");
String smsCode = reader.readLine();
TLAuthorization auth = api.doRpcCallNonAuth(new TLRequestAuthSignIn(number, hash, smsCode));
api.getState().setAuthenticated(api.getState().getPrimaryDc(), true);
//This is where I get the Error
TLExportedAuthorization test = api.doRpcCall(new TLRequestAuthExportAuthorization(api.getState().getPrimaryDc()));
System.out.println(test.getId());
FileOutputStream stream = new FileOutputStream(Paths.get("").toAbsolutePath().toString() + File.separator + "test.txt");
try
{
stream.write(test.getBytes().getData());
}
finally
{
stream.close();
}
TLState state = api.doRpcCall(new TLRequestUpdatesGetState());
System.out.println(state.getDate() + " | " + state.getPts() + " | " + state.getQts() + " | " + state.getUnreadCount());
TLAbsUser user = auth.getUser();
}
这里是错误:
TelegramApi#1001:Timeout Iteration
TelegramApi#1001:RPC #3: Timeout (14999 ms)
TelegramApi#1001:Timeout Iteration
org.telegram.api.engine.TimeoutException
at org.telegram.api.engine.TelegramApi.doRpcCall(TelegramApi.java:364)
at org.telegram.api.engine.TelegramApi.doRpcCall(TelegramApi.java:309)
at org.telegram.api.engine.TelegramApi.doRpcCall(TelegramApi.java:400)
at org.telegram.api.engine.TelegramApi.doRpcCall(TelegramApi.java:396)
at at.nonon.telegram.telegram.Telegram.login(Telegram.java:165)
at at.nonon.telegram.telegram.Telegram.startApi(Telegram.java:105)
at at.nonon.telegram.telegram.Telegram.<init>(Telegram.java:54)
at at.nonon.telegram.telegram.ApiManager.startNew(ApiManager.java:21)
at at.nonon.telegram.Moin.onApiStart(Moin.java:31)
电报API#1001:超时迭代
电报API#1001:RPC#3:超时(14999毫秒)
电报API#1001:超时迭代
org.telegrame.api.engine.TimeoutException
位于org.telegram.api.engine.TelegramApi.dorpcall(TelegramApi.java:364)
位于org.telegram.api.engine.TelegramApi.dorpcall(TelegramApi.java:309)
位于org.telegram.api.engine.TelegramApi.dorpcall(TelegramApi.java:400)
位于org.telegram.api.engine.TelegramApi.dorpcall(TelegramApi.java:396)
at.nonon.telegrame.telegrame.telegrame.login(telegram.java:165)
at.nonon.telegrame.telegrame.telegrame.startApi(telegrame.java:105)
电报。电报。电报。(telegram.java:54)
at.nonon.telegram.telegrame.apimager.startNew(apimager.java:21)
at.nonon.telegrame.Moin.onApiStart(Moin.java:31)
我从电报机器人()中获取了很多代码,但即使我复制粘贴了他的代码,它仍然不起作用
提前谢谢这个问题也发生在我身上。我假设您使用的是debian或其他linux设备。问题在于Oracle JDK使用linux随机数生成器 要使其正常工作,请按如下方式运行应用程序:
java -Djava.security.egd=file:/dev/./urandom -jar foo.jar
。。。也就是说,您必须指定java.security.egd参数
详情可在此找到:
在这里:
在我更改MemoryApiState中的服务器IP地址后,它开始为我工作,如下所示
public void start(boolean isTest) {
connections = new HashMap<>();
connections.put(1, new ConnectionInfo[]{
new ConnectionInfo(1, 0, isTest ? "149.154.175.10" : "149.154.175.50", 443),
});
}
public void开始(boolean isTest){
connections=newhashmap();
连接。放置(1,新连接信息[]{
新的连接信息(1,0,isTest?“149.154.175.10”:“149.154.175.50”,443),
});
}
您的超时可能有几个原因-请在此处查看我对相同问题的回答。最好将问题标记为重复,如果你觉得你已经回答了这个问题。@PetterFriberg-这个问题其实不是重复的,因为他们问的问题不同,但我认为根本的问题是相同的。这就是为什么我在这里放了一个链接。我已经使用这个网站很长时间了,但是从来没有发布过,所以我可能不太清楚这些规则